C语言:输入[5,25]整数n,按要求打印星号的问题排查
代码问题分析及修正
存在的问题
- 输入判断逻辑错误:do-while循环的终止条件写错了。需求是输入[5,25]的整数,即n需要满足
5 ≤ n ≤25,但原代码的循环条件是n <5 || n >=25,这会导致输入25时循环不会终止,因为n>=25成立,程序会一直要求重新输入,排除了合法的25。 - 星号生成逻辑完全错误:用
char star = '*'然后执行star += '*'是对字符的ASCII值做加法运算('*'的ASCII码是42,加42后变成84,对应字符'T'),根本无法生成多个星号,打印出来的会是乱码字符。 - 缺少换行操作:原代码的
printf("%c", star)没有换行,即使星号生成正确,所有内容也会挤在同一行,不符合每行对应数量星号的要求。
修正后的代码
#include <stdio.h> int main(void) { int n, i, j; do { printf("Input an int from [5, 25]: "); scanf("%d", &n); } while (n < 5 || n > 25); // 修正循环条件,包含25 // 外层循环控制行数,从1到n for (i = 1; i <= n; i++) { // 内层循环打印当前行的i个星号 for (j = 0; j < i; j++) { printf("*"); } printf("\n"); // 每行结束后换行 } return 0; }
修正说明
- 调整do-while的循环条件为
n <5 || n>25,确保只有当n在[5,25]范围内时才退出输入循环。 - 改用双层循环:外层循环控制行数(从1到n),内层循环负责打印当前行对应的星号数量。
- 每行打印完星号后添加
printf("\n")实现换行,符合示例的格式要求。
内容的提问来源于stack exchange,提问作者tiitiiti
相关产品推荐
相关产品推荐

