C语言循环打印倒序递减数字图案的代码问题求助
代码问题排查
你的核心循环逻辑在输入行数为5时本身可以输出正确图案,运行不符合预期是三个明确的逻辑问题:
- 多余的输入阻塞:代码里写了
scanf("%d", &i),程序启动后会停在等待输入的状态,如果你没有输入数字5,要么程序一直卡住无输出,要么输入其他数值时行列数不对,甚至会输出0、负数,违反「最小数字为1」的要求。 - 硬编码初始值:把第一行的起始数字固定写为9,和图案规则没有绑定,后续调整图案参数时很容易出错。
- 无边界校验:没有判断打印的数字不能小于1,输入行数大于5时必然输出非法值。
修正代码
固定输出题目要求的图案
直接去掉输入逻辑,固定循环5次即可,运行后直接输出目标图案,不需要额外输入:
#include <stdio.h> int main() { int row, col; for (row = 0; row < 5; row++) { int num = 9 - row; for (col = 0; col < 5; col++) { printf("%d", num); num--; } printf("\n"); } return 0; }
保留输入功能的版本
因为题目要求最大数字为9、最小为1,行列数一致,这种规则下只能生成5行5列的图案,所以要加输入校验:
#include <stdio.h> int main() { int size, row, col; scanf("%d", &size); if (size != 5) { printf("输入值非法,仅支持输入5生成符合规则的图案\n"); return 1; } for (row = 0; row < size; row++) { int num = 9 - row; for (col = 0; col < size; col++) { printf("%d", num); num--; } printf("\n"); } return 0; }
运行后输出结果完全匹配要求:
98765 87654 76543 65432 54321
内容的提问来源于stack exchange,提问作者Evergreen D
相关产品推荐
相关产品推荐

