C语言嵌套for循环打印星号图案故障排查求助
问题排查与修复方案
我一眼就瞅出问题所在啦——你用来控制内层星号数量的lines2变量只初始化了一次!
问题根源
你在代码最开始把lines2赋值为输入的lines,但外层循环每次执行lines--时,lines2并不会跟着重置。第一次内层循环跑完后,lines2就变成0了,后面的外层循环再执行时,内层循环的条件lines2>0不成立,自然就不会打印任何内容,所以你只能看到第一行星号。
修复后的完整代码
#include<stdio.h> int main() { int lines; printf("Enter the number of lines : "); scanf("%d",&lines); // 外层循环控制行数,从输入的数字递减到1 for(; lines > 0; lines--) { // 每次外层循环开始时,重置星号计数器为当前行数 int lines2 = lines; // 内层循环打印当前行的星号 for(; lines2 > 0; lines2--) { printf("*"); } // 每行结束后换行 printf("\n"); } return 0; }
额外优化建议
其实你也可以不用额外的lines2变量,直接在内层循环用临时变量,代码会更简洁直观:
#include<stdio.h> int main() { int lines; printf("Enter the number of lines : "); scanf("%d",&lines); for(int i = lines; i > 0; i--) { // 内层循环打印i个星号 for(int j = 0; j < i; j++) { printf("*"); } printf("\n"); } return 0; }
这样输入5的话,就能得到你想要的输出:
***** **** *** ** *
内容的提问来源于stack exchange,提问作者user9520489
相关产品推荐
相关产品推荐

