You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:27:27