本文目录导读:
C语言中的switch到底是啥意思?一篇讲透它的用法和精髓
很多初学C语言的朋友,看到
switch这个单词,第一反应是“切换”、“开关”——没错,它在英文里确实是这个意思,但在C语言中,
switch是一种多分支选择结构,专门用来根据一个整型表达式的值,跳转到对应的
case分支去执行代码,简单说,它就是“多路开关”:一个值,对应多条不同的路,走到哪条路就干哪件事。
分支去执行代码,简单说,它就是“多路开关”:一个值,对应多条不同的路,走到哪条路就干哪件事。
switch 的基本语法
先看一个标准模板:
switch (表达式) // 表达式必须是整型(int、char、short、long、enum等){
case 常量1:
// 当表达式 == 常量1 时执行的代码
break; // 跳出一整个switch(重要!)
case 常量2:
// 当表达式 == 常量2 时执行的代码
break;
// 可以有很多 case
default: // 可选的,所有case都不匹配时执行
// 代码
break;
}
要点:
case后面的常量必须是整型常量(不能是变量,
case a:错误,但
case 3+2:可以,因为编译期能算出来)。
break用来跳出
switch,如果没有
break,会继续执行下一个
case的代码,这叫“穿透(fall-through)”。
switch 到底有什么用?——一个生动的例子
假设你写一个菜单程序:用户输入 1~5 分别代表不同的功能,你不用写一大串
if-else if,用
switch更清晰:
更清晰:
int main(){
int choice;
printf("请输入数字:1.查余额 2.取款 3.存款 4.转账 5.退出\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("您的余额是 100 元。\n");
break;
case 2:
printf("请放入银行卡,输入取款金额。\n");
break;
case 3:
printf("请放入现金。\n");
break;
case 4:
printf("请输入对方账号。\n");
break;
case 5:
printf("谢谢使用,再见!\n");
break;
default:
printf("无效输入!\n");
break;
}
return 0;
}
对比用
if-else的写法:
的写法:
if (choice == 1) { ... }else if (choice == 2) { ... }
else if (choice == 3) { ... }
else if (choice == 4) { ... }
else if (choice == 5) { ... }
else { ... }
两种都能做,但
switch的可读性明显更好,逻辑更直观。
的可读性明显更好,逻辑更直观。
必须注意的“穿透”现象
不加
break会怎样?看这个例子:
会怎样?看这个例子:
int a = 2;switch (a)
{
case 1: printf("一");
case 2: printf("二");
case 3: printf("三");
}
输出结果是:“二 三”
因为
a=2匹配了
case 2,但没遇到
break,它就会自动继续往下执行,直到遇到
break或者 switch 结束,这就是穿透。
或者 switch 结束,这就是穿透。
什么时候利用穿透?
有些场景故意用穿透来合并多个条件,例如判断月份天数:
int month = 2, days;switch (month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31; // 这些月份都是31天
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
days = 28; // 平年
break;
}
这样写比每个case单独写一大段代码要简洁。
switch 和 if-else 怎么选?
| 场景 | 推荐用 | |
|---|---|---|
| 判断条件是一个整数/字符变量的不同取值,且分支较多(3个以上) | switch | |
判断条件涉及范围(如a > 10 | )、浮点数、字符串、复杂的逻辑表达式 | if-else |
| 分支很少(2~3个) | 两者都可以,但if更灵活 |
| )、浮点数、字符串、复杂的逻辑表达式 | if-else |
| 分支很少(2~3个) | 两者都可以,但if更灵活 |
注意:switch 不支持浮点数判断,
switch (3.14)就会报错。
就会报错。
break 和 default 的小细节
default不一定放在最后,但习惯上放最后,它只是“所有case都不匹配时执行”的兜底。
- 不一定放在最后,但习惯上放最后,它只是“所有case都不匹配时执行”的兜底。
- 不写,且没有任何 case 匹配,则整个 switch 什么都不执行。
- 每个
- 是初学者最常见的 bug,记得检查。
- 表达式必须是整型。
- 每个 case 后加
- 防穿透(除非故意)。
- 做兜底处理。
default不写,且没有任何 case 匹配,则整个 switch 什么都不执行。
case里面最后一条语句如果是
break,可以省略吗?不可以!除非你明确想要穿透,漏掉
break是初学者最常见的 bug,记得检查。
switch在C语言中就是“根据一个整数,跳到对应的标签去干活”,它让多分支代码简洁、清晰、容易维护,记住三点:
在C语言中就是“根据一个整数,跳到对应的标签去干活”,它让多分支代码简洁、清晰、容易维护,记住三点:
break防穿透(除非故意)。
default做兜底处理。
写小程序、菜单、状态机的时候,
switch是你的好帮手,希望这篇文章让你彻底明白“switch啥意思”了——它就是一把多路开关,按哪个数字,走哪条路。
是你的好帮手,希望这篇文章让你彻底明白“switch啥意思”了——它就是一把多路开关,按哪个数字,走哪条路。

