C语言打印星号金字塔图案异常问题排查
问题排查与代码修复
我帮你找到了代码里的两个关键问题,正是它们导致输出不符合预期:
1. 第二个for循环后的多余分号
看这段代码:
for (j = 0; j < 2 * n + 1; j++) ; { printf("*"); // go to new row printf("\n"); }
这里的分号;是循环的结束标记,意味着这个for循环只是空跑了若干次,完全没有执行任何实际操作。后面的大括号和这个循环没有任何关联,所以每次外层循环走到这里,只会执行一次printf("*")和printf("\n")——这就是为什么你看到每行只有一个星号。
2. 星号数量的循环条件错误
就算去掉分号,你的循环条件j < 2 * n + 1也不符合金字塔的规律。金字塔第i行(从0开始计数)的星号数量应该是2*i + 1:
- 第0行(第一行):1个星号 →
2*0+1=1 - 第1行:3个星号 →
2*1+1=3 - ...
- 第4行(第五行):9个星号 →
2*4+1=9
而2*n+1对于n=5来说是11,会导致每行都打印11个星号,同样不符合需求。
修正后的完整代码
#include <stdio.h> int main() { int i, j, n = 0; printf("enter pyramid height: \t"); scanf("%d", &n); // 遍历每一行 for (i = 0; i < n; i++) { // 打印前置空格,让金字塔居中 for (j = 0; j < (n - 1 - i); j++) { printf(" "); } // 打印当前行的星号 for (j = 0; j < 2 * i + 1; j++) { printf("*"); } // 换行到下一行 printf("\n"); } return 0; }
额外说明
- 我把
void main()改成了标准的int main()并添加了return 0;,这是C语言的规范写法,避免编译器警告。 - 测试输入5时,输出会是:
* *** ***** ******* *********
内容的提问来源于stack exchange,提问作者sarah
相关产品推荐
相关产品推荐

