#include<stdio.h>
int main()
{
int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{
case 0:
case 3:a+2;
case 1:
case 2:a+3;
default:a+5;
}
printf("%d\n",a);
}
return 0;
}
Joker4110332
浏览 2440回答 3
3回答
JoianSUN
问题的根源是:case、default代码块中没有break,导致了一种case贯穿现象。也就是说,原来得到匹配的case应该在执行之后通过 break 跳出switch,但是并没有。所以继续执行当前匹配的 case 之后的代码,因为没有再加上 break , default 代码块始终会被执行。综上,现有代码的执行路径是:i = 1:case 1:
case 2:a+3; // a = 0 + 3 = 3
default:a+5; // a = 3 + 5 = 8i = 2:case 2:a+3; // a = 8 + 3 = 11
default:a+5; // a = 11 + 5 = 16i = 3:case 3:a+2; // a = 16 + 2 =18
case 1:
case 2:a+3; // a = 18 + 3 = 21
default:a+5; // a = 21 + 5 = 26i = 4:default:a+5; // a = 26 + 5 = 31因此,最终是 31