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
相关产品推荐
相关产品推荐

