所以我尝试运行这段代码,无法理解为什么它会给我输出给我的。如果我输入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;
}
答案 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。
在大多数情况下,不在案例块结尾处写入中断被视为错误。在某些情况下,继续执行可能会很有用,但必须非常清楚地对此进行评论以防止混淆。