首页 > 编程笔记 > C语言笔记 阅读:24

C语言switch case语句的用法(非常详细)

在 C语言中,switch case 语句是一种多分支选择结构,用于根据表达式的值执行不同的代码块。

相比于嵌套的 if elseswitch case 语法更简洁,可读性更强,尤其在需要匹配多个固定值时。换句话说,switch case语句是 if else 的替代方案,特别适合处理多个离散值的条件判断。

本教程将详细讲解 switch case 的语法、工作原理、使用场景以及注意事项。

switch case的基本用法

switch case 的基本语法结构如下:

switch (表达式) {
    case 常量值1:
        // 当表达式等于常量值1 时执行
        break;
    case 常量值2:
        // 当表达式等于常量值2 时执行
        break;
    default:
        // 当没有匹配的 case 时执行
}

switch case 语句通过一个表达式的值与多个 case 标签进行匹配,找到匹配的分支后执行相应代码。如果没有匹配项,则执行默认分支(default)。
 

switch 语句的工作流程如下:

  1. 计算 switch 后的表达式值。
  2. 从上到下查找匹配的 case 标签。
  3. 找到匹配后,执行该 case 后的代码,直到遇到 break 或 switch 块结束。
  4. 若无匹配且有 default,执行 default 块;否则,直接退出。


switch case 语句的核心思想是“根据值选择路径”,常用于菜单选择、状态机等场景。


【实例】简单选择。
#include <stdio.h>

int main(void) {
    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;
}

输出结果:

星期三

day 的值 3monitor 匹配 case 3,执行对应代码后,break 退出 switch


注意,没有 break 时,switch case 语句会发生“贯穿”(fall-through),即继续执行后续 case 的代码。


【实例】贯穿现象。
#include <stdio.h>

int main(void) {
    int num = 2;
    switch (num) {
        case 1:
            printf("一 ");
        case 2:
            printf("二 ");
        case 3:
            printf("三\n");
            break;
        default:
            printf("其他\n");
    }
    return 0;
}

输出结果:

二 三

num 匹配 case 2,但无 break,继续执行 case 3,直到 break 退出。

switch case的实际应用

1) 字符匹配

switch 支持 char 类型,常用于处理字符输入。

#include <stdio.h>

int main(void) {
    char grade = 'B';
    switch (grade) {
        case 'A':
            printf("优秀\n");
            break;
        case 'B':
            printf("良好\n");
            break;
        case 'C':
            printf("及格\n");
            break;
        default:
            printf("未知等级\n");
    }
    return 0;
}

输出结果:

良好

2) 多值共享代码

多个 case 可以共享同一段代码,通过连续写出 case 并省略中间的 break

#include <stdio.h>

int main(void) {
    int month = 4;
    switch (month) {
        case 3:
        case 4:
        case 5:
            printf("春季\n");
            break;
        case 6:
        case 7:
        case 8:
            printf("夏季\n");
            break;
        default:
            printf("其他季节\n");
    }
    return 0;
}

输出结果:

春季

month 为 4,匹配 case 4,执行下方代码直到 break

3) 嵌套switch

switch 可以嵌套,用于更复杂的多级判断。

#include <stdio.h>

int main(void) {
    int type = 1, level = 2;
    switch (type) {
        case 1:
            switch (level) {
                case 1:
                    printf("初级战士\n");
                    break;
                case 2:
                    printf("中级战士\n");
                    break;
            }
            break;
        case 2:
            printf("法师\n");
            break;
        default:
            printf("未知类型\n");
    }
    return 0;
}

输出结果:

中级战士

switch case和if else的对比

特性 switch case if else
适用条件 离散整数值 任意表达式
可读性 多值匹配时更清晰 复杂条件时更灵活
执行效率 可能优化为跳转表 逐一检查条件

switch case注意事项

1) break的重要性

忘记 break 会导致意外的贯穿,需根据需求决定是否省略。

2) 表达式类型限制

switch 表达式必须是整数类型,不能使用浮点数或字符串。

// 错误示例
float f = 1.0;
switch (f) { ... } // 编译错误

3) case常量要求

case 后的值必须是常量,不能是变量或表达式。

// 错误示例
int x = 1;
switch (num) {
    case x: // 编译错误
}

4) default的作用

建议总是添加 default,处理意外输入,提高程序健壮性。

总结

C语言的switch case语句是一种高效的多分支选择工具,在一些场景中,它能代替 if else 分支语句,实现清晰且高效的代码逻辑。

读完本文,相信你已经掌握switch case语句的用法,并搞清楚了它和if else语句各自的适用场景。

相关文章