为何这段C语言程序输出结果是6而非-8?
为什么这段C程序输出是6而不是-8?
你核心的错误是误解了switch的判断条件:switch (x % 2 == 0) 里的判断对象是**x%2 == 0这个布尔表达式的结果**,而不是x%2本身。
具体执行流程分析:
- 变量初始化:
x=2,a=1 - 计算switch条件:
x%2的结果是0,0 == 0是布尔真,在C语言中布尔真会被转换为整数1,所以switch实际匹配的是case 1分支 - 进入case1后,执行
a=a+2,此时a=1+2=3 - 因为case1后面没有
break语句,程序会继续往下执行后续分支的代码,直到遇到break:- 进入case4,执行
a=a+3,此时a=3+3=6 - 遇到case4的
break,跳出switch结构
- 进入case4,执行
- 最后执行
printf输出a的值,也就是6
你预想的-8是什么情况?
如果switch的条件写成switch(x%2),那x%2=0会匹配case0:
- 执行
a=a-4→1-4=-3 - 同样因为没有break,继续执行case6的
a=a-5→-3-5=-8 - 遇到break后输出-8,但这和当前代码的条件完全不同。
内容的提问来源于stack exchange,提问作者Jhoneyd Mechakra
相关产品推荐
相关产品推荐

