【发布时间】:2017-01-08 13:31:55
【问题描述】:
所以我已经为此苦苦挣扎了一段时间,但我不明白为什么会这样。
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
我无法在其他任何地方找到有关嵌套 case 语句的任何信息。
【问题讨论】:
-
“Fallthrough”是要搜索的关键字。 (它们并不是真正的“嵌套”,实际上它们经常被写在下面彼此。)
-
除此之外:养成
breakcase的习惯。虽然你的continue意味着你不需要它,但如果你省略它,你最终可能会得到比 case fall-through 更意想不到的东西......循环在i=1和i=4上递增sum,并停在i=5...0+1+1 == 2。如果您不需要条件流,但可以选择需要条件值,则 LUT 更快更简单:sum=0; for(var i = 0; i < 10; i++) sum+={1:1,4:2,7:3}[i]||0; -
这是使用符号编译的绝佳机会,在调试器中运行代码以逐行跟踪程序,检查相关变量的值以了解实际情况。
标签: c loops switch-statement