4. switch 语句
switch 语句用于多分支选择,根据表达式的值跳转到匹配的 case 标签语句处执行代码。
作用:根据表达式具体的取值,执行对应的语句(语句块)。
语法:
switch (表达式) {
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
case 常量表达式3: 语句3;
...
default: 语句(other);
}
语法中:
switch、case和default是关键字。
语法说明:
case标签语句可以有零个、一个、或多个。default:标签语句只能有一个且只能放在最后。case标签后面的值必须是常量表达式(通常是字面值),不能是含有变量的非常量表达式。switch语句先计算表达式的值,然后用此值自上而下比较case中的常数值,直至找到一个相等的值,然后执行匹配的语句块。default:标签的语句块会在上述所有的 case 标签都没有匹配成功的情况下执行。- 如果
case对应的语句块内没有用 break 语句终止执行 switch,则会向下执行所有的语句块(包括default:标签后面的语句块),直至结束。
示例:
请输入一年中的季度(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 语句。
实验:
完成上述示例的编写和运行,仔细查看运行结果是否与讲述内容相符。