4. switch 语句

switch 语句用于多分支选择,根据表达式的值跳转到匹配的 case 标签语句处执行代码。

作用:根据表达式具体的取值,执行对应的语句(语句块)。

语法:

switch (表达式) {
    case 常量表达式1: 语句1;
    case 常量表达式2: 语句2;
    case 常量表达式3: 语句3;
    ...
    default: 语句other;
}

语法中:switchcasedefault 是关键字。

语法说明:

示例:

请输入一年中的季度(1/2/3/4),打印这个季度对应的名称。如果输入其它值,则提示:您的输入有误!

#include <stdio.h>

int main(int argc, char *argv[]) {
    int season;

    printf("请输入一年中的季度(1/2/3/4):");
    scanf("%d", &season);
    switch (season) {
        case 1:
            printf("春季\n");
        case 2:
            printf("夏季\n");
        case 3:
            printf("秋季\n");
        case 4:
            printf("冬季\n");
        default:
            printf("您的输入有误!\n");
    }

    return 0;
}

执行结果:

weimingze@mzstudio:~$ ./a.out
请输入一年中的季度(1/2/3/4):100
您的输入有误!
weimingze@mzstudio:~$ ./a.out
请输入一年中的季度(1/2/3/4):4
冬季
您的输入有误!
weimingze@mzstudio:~$ ./a.out
请输入一年中的季度(1/2/3/4):1
春季
夏季
秋季
冬季
您的输入有误!

从上述执行结果中可以看出,当输入 100 时,case 没有匹配则值,则直接执行 default: 后面的语句。当输入 1 时,则匹配 case 1: 标签,然后执行后面的语句,接下来执行case 2: 标签后面的语句,…… ,最后执行 default: 标签后面的语句。这种执行方式叫做穿透。如何能够避免穿透,使逻辑的正常呢?下面我们来说下 break 语句

实验:

完成上述示例的编写和运行,仔细查看运行结果是否与讲述内容相符。