C语言switch case语句用法详解(通俗易懂,适合新手小白)
在 C语言中,switch case 语句是一种多分支选择结构,用于根据变量的值执行不同的代码块。
相比于if else语句,switch case在处理多个固定值的条件判断时更加简洁和高效。本文将详细讲解switch case语句的用法、语法格式、实例代码、注意事项,以及与if else语句的区别。
switch case语句的基本用法
switch case语句通过匹配一个变量的值,选择执行对应的代码块。它的核心思想是“值匹配”,即根据变量的值跳转到相应的case分支。
语法格式:
1 switch (表达式) { 2 case 常量1: 3 // 当表达式的值等于常量1时执行的代码 4 break; 5 case 常量2: 6 // 当表达式的值等于常量2时执行的代码 7 break; 8 ... 9 default: 10 // 当表达式的值不匹配任何case时执行的代码 11 }
代码执行流程:
-
计算
switch后面表达式的值。 -
将表达式的值与每个
case后的常量进行比较。 -
如果找到匹配的
case,则执行对应的代码块,直到遇到break语句或switch语句结束。 -
如果没有匹配的
case,则执行default块中的代码(如果有)。
以下是一个简单的switch case示例,根据用户输入的数字输出对应的星期几:
1 #include <stdio.h> 2 3 int main() { 4 int day; 5 6 printf("请输入一个数字(1-7):"); 7 scanf("%d", &day); 8 9 switch (day) { 10 case 1: 11 printf("星期一\n"); 12 break; 13 case 2: 14 printf("星期二\n"); 15 break; 16 case 3: 17 printf("星期三\n"); 18 break; 19 case 4: 20 printf("星期四\n"); 21 break; 22 case 5: 23 printf("星期五\n"); 24 break; 25 case 6: 26 printf("星期六\n"); 27 break; 28 case 7: 29 printf("星期日\n"); 30 break; 31 default: 32 printf("输入错误,请输入1-7之间的数字!\n"); 33 } 34 35 return 0; 36 }
代码解释:
-
day是用户输入的数字,switch会根据day的值跳转到对应的case分支。 -
如果
day的值为1,输出"星期一",然后遇到break语句,跳出switch。 -
如果
day的值不在1-7之间,执行default块中的代码,提示输入错误。
switch case 语句的注意事项
1) break语句的作用
-
break语句用于结束当前case的执行,跳出switch语句。 -
如果没有
break,程序会继续执行后续的case代码块,直到遇到break或switch结束。这种现象称为“case穿透”。
示例:
1 #include <stdio.h> 2 3 int main() { 4 int num = 2; 5 6 switch (num) { 7 case 1: 8 printf("执行case 1\n"); 9 case 2: 10 printf("执行case 2\n"); // 因为没有break,继续执行下一个case 11 case 3: 12 printf("执行case 3\n"); 13 default: 14 printf("执行default\n"); 15 } 16 17 return 0; 18 }
输出:
执行case 2
执行case 3
执行default
2) default块的作用
-
default块是可选的,用于处理所有case都不匹配的情况。 -
如果没有
default,且所有case都不匹配,则switch语句不执行任何代码。
3) case后的常量必须是整型或字符型
-
switch的表达式和case后的常量必须是整型(如int)或字符型(如char),不能是浮点型或字符串。
4) case常量不能重复
-
每个
case后的常量值必须唯一,不能有重复。
switch case 与if else的区别
1)适用场景
-
switch case:适用于对固定值的条件判断,尤其是当变量的值有多个明确的选项时(如菜单选择、状态码等)。 -
if else:适用于对范围或复杂条件的判断(如x > 10 && y < 20)。
2)代码结构
-
switch case:结构清晰,适合多分支选择。 -
if else:结构灵活,适合处理复杂的逻辑。
3)性能
-
switch case:在某些编译器中,switch case会被优化为跳转表,执行效率较高。 -
if else:需要依次判断每个条件,效率较低。
示例对比:
1 // 使用 if else 2 if (day == 1) { 3 printf("星期一\n"); 4 } else if (day == 2) { 5 printf("星期二\n"); 6 } else if (day == 3) { 7 printf("星期三\n"); 8 } else { 9 printf("输入错误\n"); 10 } 11 12 // 使用 switch case 13 switch (day) { 14 case 1: 15 printf("星期一\n"); 16 break; 17 case 2: 18 printf("星期二\n"); 19 break; 20 case 3: 21 printf("星期三\n"); 22 break; 23 default: 24 printf("输入错误\n"); 25 }
总结
-
switch case语句是一种高效的多分支选择结构,适用于对固定值的条件判断。 -
break语句用于防止“case穿透”,确保只执行匹配的case代码块。 -
default块用于处理未匹配的情况,是可选的。 -
与
if else的区别:switch case适合处理固定值的多分支选择,而if else适合处理范围或复杂条件。
在实际编程中,应根据具体需求选择合适的条件控制语句。如果条件判断是基于固定值的,优先使用switch case;如果条件判断涉及范围或复杂逻辑,则使用if else。掌握这两种语句的使用场景和技巧,能够帮助你编写更加高效和清晰的代码。
最后,给大家推荐一个 1.7W 字的【C语言学习小册】,直接免费下载领取,能带你踹开编程的大门,让你对 C 语言本身,以及 C 语言的周边都有一个整体上的认知,阅读完后,能帮你解开很多疑问,比如:
- C语言到底是什么玩意?
- C语言到底能干什么?
- 学编程难吗?多久能学会?
- C语言和C++到底有什么关系?
- 2025年了,程序员有必要学习C语言吗?
- 为什么很多人学了 C 语言感觉它屁用没有?
- 学习C语言,为什么一定要学习内存?
- 主流的C语言编译器有哪些,它们各自有什么优缺点?
系统学习 C 语言,请猛击《C语言入门教程(非常详细,尤其适合新手小白)》。


浙公网安备 33010602011771号