为何continue语句在无限循环中导致后续代码无法执行?代码输出疑问
问题分析:为何这段C代码无输出?
原代码
#include<stdio.h> int main() { int i=0; for(;;) { if(i==10) { continue; } printf("%d",++i); } }
问题描述
上述代码运行后无任何输出,但预期应该输出1到无限大的数值(除10外)。已知continue语句会跳过其后续代码,但它处于if条件判断中,为何后续代码无法正常执行?
原因解析
1. 死循环卡点
执行流程的关键问题出在i=10后的循环逻辑:
- 初始
i=0,进入循环后if(i==10)不成立,执行printf("%d",++i),i自增为1,输出内容暂存在缓冲区。 - 重复该过程,直到
i=9时,if条件仍不成立,执行printf后i自增为10,输出内容继续留在缓冲区。 - 下一次循环时,
i=10触发if条件,执行continue跳过printf,但没有任何代码修改i的值,导致后续每次循环i都保持10,永远触发continue,彻底卡死在循环里,再也不会执行输出操作。
2. 标准输出缓冲区未刷新
C语言中stdout默认是行缓冲模式,只有输出换行符\n、缓冲区被填满,或者主动调用fflush(stdout)时,才会把缓冲区里的内容刷到终端显示。原代码的printf没有加换行,前面的输出全部暂存在缓冲区,还没来得及显示就进入了死循环,所以你看不到任何内容。
修复示例
针对两个问题调整后的代码:
#include<stdio.h> int main() { int i=0; for(;;) { if(i==10) { i++; // 让i跳出10的死循环卡点 continue; } printf("%d\n",++i); // 加换行自动刷新缓冲区 } }
内容的提问来源于stack exchange,提问作者SARAN V
相关产品推荐
相关产品推荐

