C语言循环实现指定数字图案的代码错误排查咨询
问题排查与修正
咱们一步步拆解你的代码问题,看看为什么输出不了你想要的1、21、321、4321图案:
核心错误点
- 内层循环条件逻辑完全错误:你写的
for(j=n;j<=i;j--)不符合需求。比如当n=4、第一次循环i=1时,j=4根本不满足j<=i,内层循环直接跳过,自然不会输出任何内容。而且咱们要的是从当前行号i递减到1的序列,循环起始值应该是i而非n,循环终止条件也应该是j>=1。 - 打印内容与判断逻辑冗余:你代码里打印的是字符
"j",但实际需要打印数字;另外if((i/j==1))这个判断完全没必要,咱们不需要额外判断,直接输出当前的j值就好。
修正后的代码
#include <stdio.h> int main(){ int i,j,n; printf("enter n value\n"); scanf("%d",&n); // 外层循环控制总行数,从1到n for(i=1;i<=n;i++) { // 内层循环从当前行号i开始,递减到1,生成目标数字序列 for(j=i;j>=1;j--) { printf("%d", j); // 直接打印数字j } printf("\n"); // 每行结束后换行 } return 0; }
代码说明
- 外层
for循环的i从1遍历到n,负责控制要打印的总行数。 - 内层
for循环的j从当前的i开始,每次减1直到j=1,这样每次循环都会输出i、i-1……1的数字序列。 - 每行序列打印完成后,通过
printf("\n")换行,保证每一行内容单独显示。
测试时输入n=4,输出结果就是你想要的:
1 21 321 4321
内容的提问来源于stack exchange,提问作者Manikanta k
相关产品推荐
相关产品推荐

