Z
ZHANK
控制流程

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: ...            // 编译错误