理解这个Switch语句

时间:2014-11-09 20:10:33

标签: c++

所以我尝试运行这段代码,无法理解为什么它会给我输出给我的。如果我输入4,为什么结果为17?我真的不明白。有人可以解释一下吗?

#include<iostream>
using namespace std;
int main() {
    int num;
    int alpha = 10;
    cout << "Enter a number :" << endl;
    cin >> num;
    switch(num) {
        case 3: 
            alpha++;
            break;
        case 4: 
        case 6: 
            alpha = alpha + 3;
        case 8: 
            alpha = alpha + 4;
            break;
        default: 
            alpha = alpha + 5;
    }

    cout << alpha << endl;

    return 0;
}

2 个答案:

答案 0 :(得分:4)

如果break;的正文中没有任何case(或其他会退出案例的内容,如goto),则下一个案例会继续执行声明(它将通过,因为它通常是已知的)。

在您输入4的情况下,首先输入case 4:,然后转到case 6:然后转到case 8:,最终结果将是alpha(10)+ 3 + 4 = 17.由于case 8:break;,因此switch语句将退出此处。

另一方面,有一种叫做复合赋值+=的东西可以用来节省一些空间,所以不是

alpha = alpha + 3;

你可以这样做:

alpha += 3;

答案 1 :(得分:0)

case语句以下列方式工作:执行跳转到匹配的case语句并继续直到break或switch块结束。因此,也执行案例8之后的陈述。所以,10 + 3 + 4 = 17。

在大多数情况下,不在案例块结尾处写入中断被视为错误。在某些情况下,继续执行可能会很有用,但必须非常清楚地对此进行评论以防止混淆。