switch 语句
switch/case/default、break 的重要性、fall-through 机制
switch 语句
多个 if-else 判断同一个变量时,switch 更清晰、更高效。但忘了 break 就会 fall-through——这个"特性"害了无数新手。
学完本章你将: 掌握 switch 语法、break 必要性、fall-through 的巧妙利用。
基本语法
c
#include <stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
default:
printf("不是周一到周三\n");
}
return 0;
}
为什么要有 break
如果没有 break,执行会"穿透"到下一个 case:
c
int x = 1;
switch (x) {
case 1: printf("One ");
case 2: printf("Two ");
default: printf("Other");
}
// 输出:One Two Other(三个都执行了!)
⚠️ 这不算 bug——fall-through 是设计特性,但你忘了 break 时它就是 bug。
fall-through 的巧妙应用
c
// 多个 case 做同一件事
switch (month) {
case 12:
case 1:
case 2:
printf("冬天\n");
break;
case 3:
case 4:
case 5:
printf("春天\n");
break;
// ...
}
switch 的限制
c
// ✅ switch 可以用整数、char、枚举
switch (x) { ... } // int
switch (c) { ... } // char(本质是整数)
switch (color) { ... } // enum
// ❌ 不能用浮点数、字符串
// switch (3.14) { ... }
// switch ("hello") { ... }
// ❌ case 后面必须是常量
// int y = 10;
// case y: ... // 编译错误