You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:24:33