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

switch case语句的用法(附带示例)

C语言中的 switch case 语句是一种常用的选择结构,它允许程序根据一个变量的不同值执行不同的代码块。switch case 特别适合处理多重条件分支的情况,相比于使用多个 if else 语句,switch case 通常更加清晰和高效。
 

switch case 语句的基本语法如下:

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

让我们深入了解 switch case 语句的各个组成部分:

switch 关键字和表达式

switch 后面的括号中包含一个表达式,这个表达式的结果将被用来与各个 case 的常量值进行比较。表达式可以是变量、常量或复杂表达式,但必须能够得到一个整数值(包括 char 类型)。

case 标签

每个 case 标签后面跟着一个常量值和一个冒号。如果 switch 表达式的值与某个 case 的常量值匹配,程序将从该 case 标签后的代码开始执行。

break 语句

通常在每个 case 的代码块末尾都会有一个 break 语句。这个语句用于跳出 switch 结构,防止程序继续执行下一个 case。如果省略 break,程序会继续执行下一个 case 的代码,这种情况称为贯穿(fall through)

default 标签

这是一个可选的部分,用于处理所有 case 都不匹配的情况。如果没有匹配的 case,且存在 default 标签,程序将执行 default 后的代码。


下面是一个使用 switch case 语句的具体例子,这个程序根据用户输入的数字(1-7)输出对应的星期几:

#include <stdio.h>

int main() {
    int day;
    printf("请输入一个数字(1-7):");
    scanf("%d", &day);

    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("无效的输入!请输入 1 到 7 之间的数字。\n");
    }

    return 0;
}

这个程序的输出可能如下:

请输入一个数字(1-7):3
星期三


switch case 语句的一些重要特点和注意事项:

1) 数据类型限制

switch 表达式和 case 常量必须是整数类型(包括 char),不能使用浮点数或字符串。

2) case 标签的唯一性

每个 case 标签必须是唯一的,不允许有重复的 case 值。

3) default 的位置

虽然 default 通常放在最后,但它实际上可以放在 switch 语句的任何位置。不过,为了代码的可读性,建议将其放在最后。

4) 贯穿(fall-through)

如果省略 break 语句,程序将继续执行下一个 case 的代码,这种特性有时可以用来为多个 case 执行相同的代码。例如:

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

5) 嵌套的 switch 语句

switch 语句可以嵌套使用,即在一个 switch 语句的 case 中包含另一个 switch 语句,但这种做法可能会使代码变得复杂,应谨慎使用。

6) case 中的变量声明

在 C89 标准中,不允许在 case 标签之后直接声明变量,如果需要在 case 中声明变量,应该将整个 case 的代码块用花括号 {} 括起来。但是,C99 及以后的标准放宽了这个限制。


总之,switch case 语句是C语言中一个非常有用的控制结构,特别适合处理多个离散值的情况。相比于使用多个 if else 语句,switch case 通常能提供更清晰的代码结构和更高的执行效率。然而,它也有其局限性,如只能用于整数类型的比较。在实际编程中,应根据具体情况选择最合适的控制结构。

推荐阅读