为什么案例2在此for循环中被评估两次?
for (int x = 0; x <4; x++)
{
switch (x)
{
case 2: printf("%d", x);
case 0: printf("%d", x);
default: break;
case 3: printf("%d", x);
}
}
编辑:我忘了补充一点,这不是一段合法的代码。上周我的朋友工作考试中出现了一些问题。
答案 0 :(得分:6)
案例2没有被评估两次:它只被评估一次。但是,如果您不使用break
语句结束案例,而不是离开switch
,则会继续执行下一个案例。
换句话说,当x
为2时,执行跳转到case 2
并用x = 2调用printf("%d", x)
。然后,执行进入情况0,并调用{{1 x仍然等于2.然后,执行进入printf("%d", x)
情况,它会命中default
语句并最终离开break
。
答案 1 :(得分:1)
它没有。这些案件没有中断。这就是为什么它打印案例2然后案例0。