C语言switch语句的用法(非常详细,新手必看)
C语言中的 if else 语句只有两个分支可供选择,而在实际问题中常需要用到多分支选择。就像买衣服,可以有多种选择。当然,使用嵌套的 if 语句也可以采用多分支实现买衣服的选择,但是分支较多,就会使得嵌套的 if 语句层数较多,程序会变得冗余并且可读性不好。
在 C语言中,可以使用 switch 语句直接处理像买衣服这种多分支选择的情况,以提高程序的可读性。
switch 语句的实现过程如下:
switch 语句的执行流程图如下图所示:

图 1 switch 语句的执行流程图
下面通过图 1 所示的流程图分析 switch 语句的一般形式:
switch 语句检验的必须是整型表达式,这意味着其中可以包含运算符和函数。而 case 语句检验的值必须是整型常量,即可以是常量表达式或者包含常量运算。
下面通过如下代码来分析 switch 语句的使用方法:
注意,在使用 switch 语句时,如果没有一个 case 语句后面的值能匹配 switch 语句的条件,就执行 default 后面的语句。其中,任意两个 case 语句不能使用相同的常量值;并且每一个 switch 结构只能有一个 default 语句,而且 default 可以省略。
在使用 switch 语句时,每一个 case 中都要使用 break 语句,break 语句可实现执行完 case 语句后跳出 switch 语句。如果没有 break 语句,程序会将后面的内容全都执行。
例如下面的代码,case 语句结束后不加 break:
【实例】平年一年中的 12 个月,1、3、5、7、8、10、12 月是 31 天,4、6、9、11 月是 30 天,2 月是 28 天,如果在控制台上任意输入月份,就可以知道这个月有多少天。具体代码如下:
在 C语言中,可以使用 switch 语句直接处理像买衣服这种多分支选择的情况,以提高程序的可读性。
C语言switch语句的基本形式
switch 语句是多分支选择语句,它的一般形式如下:switch(表达式) { case 情况1: 语句块1; case 情况2: 语句块2; … case 情况n: 语句块n; default: 所有情况都不符合语句块; }有以下几点说明:
- switch 和 case 是条件分支语句中的关键字。
-
switch 后面的表达式必须用圆括号标识,此表达式的结果值必须是整型或者字符型。switch 语句后面紧跟的
{ }
标识的部分成为 switch 的语句块,其中的{ }
一定不能省略。 - case 后面必须是常量或者常量表达式,不能是变量。case 与常量或者常量表达式之间有空格,同时 case 和常量或者常量表达式的句末一定要用冒号。case 和紧跟的常量或者常量表达式合称为 case 语句标号,由它来检测该执行哪条 case 语句后的语句。
- 各 case 语句标号应该互不干扰,case 语句标号后的语句块 1、语句块 2 等可以是一条语句,也可以是复合语句。
- default 也起到标号作用,代表 case 语句标号之外的标号。default 标号可以出现在语句块的任何位置,并不会影响程序的运行。当然,switch 语句也可以没有 default 标号。
switch 语句的实现过程如下:
- 步骤 1:计算 switch 后圆括号内的表达式的值。
- 步骤 2:用这个值逐个与 case 后的常量或者常量表达式进行比较,当找到匹配的值时,就执行该 case 后面紧跟的语句块。若没有与 case 中的常量或者常量表达式匹配的值,就执行 default 后紧跟的语句。
switch 语句的执行流程图如下图所示:

图 1 switch 语句的执行流程图
下面通过图 1 所示的流程图分析 switch 语句的一般形式:
- switch 语句后面的括号中的表达式就是要进行判断的条件;
- 在 switch 的语句块中,使用 case 关键字表示检验条件符合的各种情况,其后的语句代表相应的操作;
- 还有一个 default 关键字,如果没有符合条件的情况,那么执行 default 后的默认语句。
switch 语句检验的必须是整型表达式,这意味着其中可以包含运算符和函数。而 case 语句检验的值必须是整型常量,即可以是常量表达式或者包含常量运算。
下面通过如下代码来分析 switch 语句的使用方法:
switch(selection) { case 1: printf("选择矿泉水\n"); break; case 2: printf("选择旺仔\n"); break; case 3: printf("选择脉动\n"); break; default: printf("输入错啦!\n"); break; }上述代码通过 switch 判断 selection 变量的值,利用 case 语句检验 selection 的值的不同情况:
- 假设 selection 的值为 1,那么执行 case 1 时,就会输出“选择矿泉水”,执行后通过 break 跳出 switch 语句;
- 假设 selection 的值为 2,就会输出“选择旺仔”,执行后通过 break 跳出 switch 语句;
- 假设 selection 的值为 3,就会输出“选择脉动”,执行后通过 break 跳出 switch 语句;
- 如果 selection 的值不符合 case 中所检验的情况,那么执行 default 中的语句,就会输出“输入错啦!”。
- 在每一个 case 或 default 语句后都有一个 break 关键字。break 语句用于跳出 switch 语句,不再执行 switch 下面的语句。
注意,在使用 switch 语句时,如果没有一个 case 语句后面的值能匹配 switch 语句的条件,就执行 default 后面的语句。其中,任意两个 case 语句不能使用相同的常量值;并且每一个 switch 结构只能有一个 default 语句,而且 default 可以省略。
在使用 switch 语句时,每一个 case 中都要使用 break 语句,break 语句可实现执行完 case 语句后跳出 switch 语句。如果没有 break 语句,程序会将后面的内容全都执行。
例如下面的代码,case 语句结束后不加 break:
#include <stdio.h> int main(){ int money; printf("请查看口袋剩多少元钱\n"); scanf("%d", &money); switch (money) { case 7: printf("还剩%d元,吃米饭套餐\n", money); //没有break语句 case 12: printf("还剩%d元,吃米线\n", money); //没有break语句 case 40: printf("还剩%d元,吃比萨\n", money); //没有break语句 default: printf("没钱了!!!\n"); } }运行结果为:
请查看口袋剩多少元钱
7
还剩7元,吃米饭套餐
还剩7元,吃米线
还剩7元,吃比萨
没钱了!!!
多路开关模式的switch语句
在前面的实例中,将 break 语句去掉之后,会将符合检验条件后的所有语句都输出。利用这个特点,可以设计多路开关模式的 switch 语句,它的形式如下:switch(表达式) { case 1: 语句1 break; case 2: case 3: 语句2 break; … default: 默认语句 break; }从以上形式中可以看到,如果在 case 2 后不使用 break 语句,那么符合 case 2 检验时与符合 case 3 检验时的输出效果是一样的。也就是说,使用多路开关模式,可以使多种检验条件用一个语句块输出。
【实例】平年一年中的 12 个月,1、3、5、7、8、10、12 月是 31 天,4、6、9、11 月是 30 天,2 月是 28 天,如果在控制台上任意输入月份,就可以知道这个月有多少天。具体代码如下:
#include<stdio.h> int main() { int month; printf("请输入月份:\n"); scanf("%d", &month); switch (month) { //多路开关模式 case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d月有31天\n", month); break; //多路开关模式 case 4: case 6: case 9: case 11: printf("%d月有30天\n", month); break; case 2: printf("%d月有28天\n", month); break; default: printf("输入错啦,没有这个月份\n"); } return 0; //程序结束 }运行结果为:
请输入月份:
3
3月有31天