switch语句是C语言中用于实现多分支选择的重要控制结构,能够根据表达式的不同取值执行对应的代码分支,相比多个if-else嵌套的写法,逻辑更清晰,代码可读性更高。

switch语句的基本语法
switch语句的核心结构由switch关键字、判断表达式、case分支、break语句和可选的default分支组成,基本语法格式如下:
switch(表达式) {
case 常量1:
// 表达式等于常量1时执行的代码
break;
case 常量2:
// 表达式等于常量2时执行的代码
break;
// 可以有多个case分支
default:
// 表达式不匹配任何case常量时执行的代码
break;
}
需要注意,switch后面的表达式结果必须是整型或者可以隐式转换为整型的类型,比如char、int、short、long等,浮点型和字符串类型不能作为switch的表达式。
各组成部分的作用
case关键字
case后面跟随的是常量表达式,当switch的表达式结果和case后的常量相等时,程序会从该case分支开始执行。case后的常量值不能重复,否则会出现编译错误。
break关键字
break的作用是跳出整个switch语句,如果某个case分支末尾没有写break,程序会继续执行下一个case分支的代码,这种现象叫做case穿透。比如下面的代码:
#include <stdio.h>
int main() {
int num = 1;
switch(num) {
case 1:
printf("num是1n");
case 2:
printf("num是2n");
break;
default:
printf("num不是1也不是2n");
break;
}
return 0;
}
这段代码的输出会是:
num是1 num是2
因为case 1分支没有break,所以执行完case 1的代码后会继续执行case 2的代码,直到遇到break才跳出switch。
default关键字
default分支是可选的,当switch的表达式结果不匹配任何case后的常量时,会执行default分支的代码。如果不需要处理不匹配的情况,也可以省略default分支。
使用示例
下面通过一个成绩等级判断的例子展示switch的实际用法,规则是90分及以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E:
#include <stdio.h>
int main() {
int score;
printf("请输入成绩:");
scanf("%d", &score);
// 计算成绩对应的十位数字,用于switch判断
int level = score / 10;
switch(level) {
case 10:
case 9:
printf("等级为An");
break;
case 8:
printf("等级为Bn");
break;
case 7:
printf("等级为Cn");
break;
case 6:
printf("等级为Dn");
break;
default:
printf("等级为En");
break;
}
return 0;
}
这里利用了case穿透的特性,当level是10或者9的时候都会执行输出等级为A的代码,不需要重复写两次相同的逻辑。
使用注意事项
- case后面必须是常量,不能是变量或者表达式,比如
case num:这种写法是错误的。 - switch表达式的类型必须是整型兼容类型,不能用float、double或者字符串。
- 如果不需要case穿透的效果,每个case分支末尾都要加break,避免逻辑错误。
- default分支可以放在switch内部的任意位置,通常放在所有case分支的最后,但是放在其他位置也不影响逻辑,只是可读性会稍差。