所以我现在已经挣扎了一段时间,我不明白为什么会这样。
int main(void)
{
int sum = 0;
for(int i = 0; i < 10; i++) {
switch(i) {
case 1: case 4: case 7: sum++;
default: continue;
case 5: break;
}
break;
}
printf("%d", sum);
}
输出:
2
我无法在其他任何地方找到有关嵌套案例陈述的任何信息。
答案 0 :(得分:2)
switch(i) {
case 1: case 4: case 7: sum++;
default: continue;
case 5: break;
}
以上可以等同地重写为
switch(i) {
case 1:
case 4:
case 7: sum++;
default: continue;
case 5: break;
}
案例1
和4
会出现问题。意味着执行进入下一个case语句。最终导致所有三种情况都执行相同的代码。
值得注意的是,default
也是一个有效的标签。而且它不必出现在最后!如果您删除continue
语句,则执行将从default
继续到case 5
,并且当i
为2
时,循环将结束。
答案 1 :(得分:1)
它们不是嵌套的。它们只是同一sum++;
指令的三个标签。
如果i==1
和i==4
,代码会跳转到那里,因此sum
变为2
。值0,2和3会导致switch
跳转default
标签,这是一条continue;
指令,导致循环进行下一次迭代。
在i==5
上,交换机以内部break;
指令终止,执行进入break
之后的switch(i){...}
。这会导致循环终止,因此i
变量永远不会达到值7,而sum
仍为2。