首页 > 解决方案 > 当我们不在switch语句中使用'break'语句时,为什么在其他低于'default'的情况之前评估'deafult'?

问题描述

昨天我看到了下面的代码。正如您所看到的,它没有任何break 我预测它会打印“354”,因为我认为该default部分最终会被评估(在检查所有案例之后)。

但这实际上并不正确,因为它打印了“345”。有人可以解释原因吗?

int main ()
    {
        int a = 2;
        switch (2*a-1)
        {
            case 1:  printf ("1");
            case 2:  printf("2");
            case 3:  printf("3");
            default: printf("4");
            case 5:  printf("5");
        }
    }

标签: c

解决方案


由于2*a-1是 3,代码跳转到case 3标签并从那里继续运行。其他标签被忽略,因为没有代码跳转到它们。仅当 中的值与任何标签都不匹配时,default才会跳转到该标签。switchcase


推荐阅读