首页 > 编程笔记 > C语言笔记

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

在C语言中,switch case 语句是一种强大的流程控制结构,用于根据表达式的值执行不同的代码块。switch case 提供了一种清晰、高效的方式来处理多个条件分支,特别适用于处理枚举类型或整数值的情况。

switch case语句的基本语法

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

switch (expression) {
    case constant1:
        // 代码块 1
        break;
    case constant2:
        // 代码块 2
        break;
    ...
    default:
        // 默认代码块
}

expression 是要被评估的表达式,通常是一个变量或者一个计算结果。每个 case 后面跟着一个常量值,当 expression 的值与某个 case 的常量值匹配时,对应的代码块就会被执行。

default 是可选的,当所有 case 都不匹配时,default 中的代码块会被执行。

switch case语句的工作原理

当程序执行到 switch 语句时,它会计算 expression 的值,然后依次与每个 case 的常量值进行比较。一旦找到匹配的 case,程序就会执行该 case 下的代码块,直到遇到 break 语句或者 switch 语句结束。

如果没有匹配的 case,且存在 default 分支,则会执行 default 下的代码块。


下面是一个简单的例子,展示了 switch case 语句的使用:

#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;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("无效的日期\n");
    }
    
    return 0;
}

在这个例子中,程序会输出"星期三",因为 day 的值是3,匹配了第三个 case。

break语句的重要性

在 switch case 语句中,break 语句起着至关重要的作用。break 用于在执行完当前 case 的代码块后,跳出整个 switch 语句。如果省略 break,程序会继续执行下一个 case 的代码块,直到遇到 break 或者 switch 语句结束。这种行为称为“fall-through”。
 

有时候,我们可以利用 fall-through 来实现多个 case 共享相同的代码块,例如:

#include <stdio.h>

int main() {
    char grade = 'B';
    
    switch (grade) {
        case 'A':
        case 'B':
        case 'C':
            printf("及格\n");
            break;
        case 'D':
        case 'F':
            printf("不及格\n");
            break;
        default:
            printf("无效的成绩\n");
    }
    
    return 0;
}

在这个例子中,'A'、'B'、'C' 共享相同的代码块,输出"及格";'D'、'F' 共享另一个代码块,输出"不及格"

switch case语句的优势

相比于多个 if else 语句,switch case 语句通常更加清晰和高效。当需要处理多个条件分支时,switch case 可以提供更好的可读性和性能。编译器通常会将 switch case 语句优化为跳转表,使得执行速度更快。


然而,switch case 也有一些限制。case 常量必须是整数类型(包括字符型),不能使用浮点数或字符串。此外,case 值必须是常量表达式,不能是变量。

switch case的高级用法

除了基本用法,switch case 还有一些高级技巧:


下面是一个展示这些高级用法的例子:

#include <stdio.h>

enum Color { RED, GREEN, BLUE };

int main() {
    enum Color color = GREEN;
    
    switch (color) {
        case RED: {
            int shade = 1;
            printf("红色,色调:%d\n", shade);
            break;
        }
        case GREEN: {
            int shade = 2;
            printf("绿色,色调:%d\n", shade);
            
            switch (shade) {
                case 1:
                    printf("浅绿\n");
                    break;
                case 2:
                    printf("翠绿\n");
                    break;
                default:
                    printf("深绿\n");
            }
            break;
        }
        case BLUE:
            printf("蓝色\n");
            break;
        default:
            printf("未知颜色\n");
    }
    
    return 0;
}

这个例子展示了在 case 中声明变量、使用枚举类型以及嵌套 switch 语句的用法。

总结

switch case 语句是C语言中一个强大而灵活的控制流结构,它提供了一种清晰、高效的方式来处理多个条件分支,特别适用于处理离散的、有限的值集合。通过合理使用 break 语句、利用 fall-through 特性,以及结合枚举类型等高级技巧,我们可以编写出更加简洁、可读性更强的代码。

在实际编程中,根据具体情况选择使用 if else 还是 switch case,可以使我们的代码更加优雅和高效。


声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。