为何这段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的变化:
第一次循环
- 初始化
i=1,满足i<=6条件,进入循环体。 - 执行
switch(i++):先取i=1作为switch匹配值,随后i自增为2。 - 匹配
default分支,执行i=0,此时i=0。 - 循环体结束,执行for循环增量表达式
i+=2,i变为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。
- 条件
第三次循环判断
- 条件
7<=6不成立,直接退出for循环。 - 执行
printf("--i"),i从7自减为6,最终输出Ecran : 6。
- 条件
关于无限循环的说明
按照给定代码的逻辑,程序不会出现无限循环,会正常结束并输出6。如果实际运行时出现无限循环,大概率是代码存在输入错误,比如:
- for循环的增量表达式被误写为
i-=2或i++; - for循环的条件被误写为
i>=6; - switch分支中的
break位置错误或缺失。
内容的提问来源于stack exchange,提问作者Alioune Ndiaye
相关产品推荐
相关产品推荐

