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

为何这段C语言代码会出现无限循环?求技术解析

代码执行流程与无限循环疑问解析

首先贴出问题中的代码:

#include <stdio.h>
int main(void){
    int i;
    for(i=1;i<=6;i+=2){
        switch(i++){
            case 2:case 6:i--;
            case 4:i+=2;
            case 3:i++;break;
            default: i=0;
        }
    }
    printf("Ecran : %d ", --i);
    return 0;
}

逐次循环跟踪分析

我们一步步跟踪变量i的变化:

  1. 第一次循环

    • 初始化i=1,满足i<=6条件,进入循环体。
    • 执行switch(i++):先取i=1作为switch匹配值,随后i自增为2。
    • 匹配default分支,执行i=0,此时i=0。
    • 循环体结束,执行for循环增量表达式i+=2,i变为2。
  2. 第二次循环

    • 条件2<=6成立,进入循环体。
    • 执行switch(i++):取i=2作为匹配值,随后i自增为3。
    • 匹配case 2,由于无break,代码贯穿执行:
      • 执行case 6的i--,i从3变为2;
      • 继续执行case 4的i+=2,i从2变为4;
      • 执行case 3的i++,i从4变为5,随后break退出switch。
    • 循环体结束,执行i+=2,i变为7。
  3. 第三次循环判断

    • 条件7<=6不成立,直接退出for循环。
    • 执行printf("--i"),i从7自减为6,最终输出Ecran : 6 。

关于无限循环的说明

按照给定代码的逻辑,程序不会出现无限循环,会正常结束并输出6。如果实际运行时出现无限循环,大概率是代码存在输入错误,比如:

  • for循环的增量表达式被误写为i-=2或i++;
  • for循环的条件被误写为i>=6;
  • switch分支中的break位置错误或缺失。

内容的提问来源于stack exchange,提问作者Alioune Ndiaye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:53:10