所以我已经为此苦苦挣扎了一段时间,我不明白为什么会这样。
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
我无法在其他任何地方找到有关嵌套案例语句的任何信息。
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
时结束。
它们不是嵌套的。它们只是同一sum++;
指令的三个标签。
代码在i==1
和i==4
的情况下跳到那里,因此sum
变得2
。值 0、2 和 3 会导致switch
跳转 default
标签,这是一个continue;
指令,导致循环进行下一次迭代。
i==5
,开关以内部break;
指令终止,执行进入switch(i){...}
之后的break
。这会导致循环终止,因此i
变量永远不会达到值 7,sum
保持 2。