C语言for循环使用前置递减(--i)未达预期输出的问题咨询
为什么for循环前置递减时会输出初始值n?
你的for循环输出包含n的原因,完全是因为for循环的执行顺序:
for循环的结构for(初始化; 条件判断; 更新)的执行步骤是:
- 先执行初始化语句:
i = n(输入n=6时,i直接被设为6) - 接着判断条件表达式:
i >= 1,此时6>=1成立,直接进入循环体执行printf("%d ", i);,所以第一个输出的就是6 - 执行完循环体后,才会执行更新表达式
--i,i变成5 - 重复步骤2-3,直到i=0时,条件
i>=1不成立,循环终止
这就导致你的循环从6开始输出,而不是预期的5。
如果要输出5到1,有两种简单的修改方式:
方式一:调整初始化值
把i的初始值设为n-1,保持循环条件和更新逻辑不变:
for (i = n-1; i >= 1; --i) { printf("%d ", i); }
这样输入n=6时,i初始为5,直接进入循环输出5,之后递减到1,正好符合预期。
方式二:调整循环执行逻辑
保持i初始为n,但先执行递减再输出,同时调整循环条件:
for (i = n; i > 1; ) { printf("%d ", --i); }
这里初始化i=6,条件i>1成立时,先执行--i把i变成5再输出,之后每次循环都先递减再输出,直到i=1时,条件i>1不成立,循环结束,输出结果就是5 4 3 2 1。
内容的提问来源于stack exchange,提问作者ABHINAV Bhushan
相关产品推荐
相关产品推荐

