1
int main(int argc, char *argv[]) {
    int x,i,j;
    printf("Enter X");
    scanf("%d",&x);

    for(i=0;i<x;i++){
        for (j=0;j<x;j++) {
            printf("*");
        }
        printf("\n");
        x=x-1;
    }
}

我的想法是以以下形式打印星(*)

*****
****
***
**
*

但是如果 my(x=5) 为什么我的输出仅停止打印前三行

*****
****
***
4

5 回答 5

3

因为你在增加 i 并减少 x。因此循环在三次迭代处终止。您可能想要一个“while (x > 0)”而不是一个带有单独计数器的 for。

while(x > 0){
    for (j=0;j<x;j++) {
        printf("*");
    }
  printf("\n");   
  x--;
}
于 2013-05-15T14:25:33.983 回答
1

对于学习,我认为对变量使用更具描述性的名称很有用,直到您真正学会如何read C...

//not ideal but better to get a correct version fist then optimise if needed
    int numberOfStars = 4;
    for(int counter = numberOfStars ; counter > 0 ; counter--){
        int numberOfStarsThisLine = counter;
        while (numberOfStarsThisLine)
        {
            printf("*");
            numberOfStarsThisLine--;
        }
        puts("");
    }
}
于 2013-05-15T14:34:45.897 回答
0

您正在减小 x 的大小,这意味着外部循环:

for(i=0;i<x;i++){

终止于 x/2 项...(因为您也在递增i

于 2013-05-15T14:24:35.123 回答
0
for(i=0;x>0;i++,x--){
    for (j=0;j<x;j++){
        printf("*");
    }
    printf("\n");
}
于 2013-05-15T14:24:38.120 回答
0
for(i=0;i<x;i++){
    for (j=i;j<x;j++) {
        printf("*");
    }
    printf("\n");
}
于 2013-05-15T14:36:46.870 回答