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

C语言实现逐行递减星号输出的代码修改求助

C语言实现逐行递减星号输出的代码修改求助

嗨,我来帮你搞定这个问题~你现在的代码只完成了“一行星号”的输出,要实现逐行递减的星号效果,核心是要用到嵌套循环来分别控制行数和每行的星号数量,同时别忘了每行结束后换行。先给你指出来现有代码的两个小问题:一是main函数开头少了左大括号{,这会导致语法错误;二是只有一层循环,没法处理多行输出的逻辑。

先直接给你修改后的完整代码,你可以直接运行试试:

#include <stdio.h>

int main(void) {
    int n;
    while (1) {
        printf("Please input a positive number\n");
        scanf(" %d", &n);
        if (n > 0) {
            break;
        }
    }
    // 外层循环:控制输出的行数,从n递减到1
    for (int i = n; i >= 1; i--) {
        // 内层循环:打印当前行的i个星号
        for (int j = 0; j < i; j++) {
            printf("*");
        }
        // 每行星号打印完后换行
        printf("\n");
    }
    return 0;
}

接下来给你拆解一下修改的关键点:

  • 外层循环:用for (int i = n; i >= 1; i--),i从你输入的n开始,每次减1,直到1为止。这样循环会执行n次,正好对应n行输出,而且i的值就是当前行需要打印的星号数量,非常直观。
  • 内层循环:针对每一行的i值,循环i次,每次打印一个*,这样就能在当前行输出i个连续的星号。
  • 换行操作:内层循环结束后,一定要加printf("\n");,不然所有星号都会挤在同一行,这也是你之前只得到一行星号的原因之一。

测试一下n=3的情况:

  • 第一次外层循环i=3:内层打3个*,然后换行,得到***
  • 第二次外层循环i=2:内层打2个*,然后换行,得到**
  • 第三次外层循环i=1:内层打1个*,然后换行,得到*
    完全符合你想要的预期结果~

另外补充一下,你原来的输入验证部分写得不错,能确保用户输入正整数,这部分我帮你保留了,只补全了main函数的左大括号,让代码能正常编译运行。

备注:内容来源于stack exchange,提问作者Aviv A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:48:19