为什么此代码打印0223?

时间:2018-04-11 22:54:20

标签: c++ c for-loop switch-statement

为什么案例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);
    }
}

编辑:我忘了补充一点,这不是一段合法的代码。上周我的朋友工作考试中出现了一些问题。

2 个答案:

答案 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。