C语言switch语句的用法(非常详细,附带实例)
在 C语言中,switch 是一种多分支的选择结构,可以根据不同的条件执行不同的语句块。
switch 语句的基本语法如下:
每个 case 分支表示一种可能的情况,default 分支则表示当所有的 case 都不符合时需要执行的语句块。当执行 switch 语句时,会将表达式的值和每个 case 分支的常量值进行比较。如果匹配成功,则执行该 case 分支的语句块;如果匹配不成功,则执行 default 分支的语句块(如果有的话)。
每个 case 分支的语句块结束后,需要使用 break 语句来终止整个 switch 语句的执行,否则会继续执行下一个 case 分支的语句块。
switch 语句的执行步骤如下:
switch 的使用如下图所示:

图 1 switch示例
switch 语句的几个注意事项:
实际上,switch 在找到对应的 case 后,会从对应的 case 处开始执行,并会执行完之后的所有 case,除非遇到 break 才会跳出整个 switch。
为了使代码按照预期执行,需要在代码中加上 break。我们在代码的第 6 个 case 中,即 'f' 处加上 break:
让我们以下面的程序为例,考虑 switch 中的 break 能否让 while(1) 循环结束:
如果我们将 break 写在 switch 语句外部,那么它将对 while 语句产生影响。我们可以查看下面的实例:
分析下面的程序:
switch 语句的基本语法如下:
switch(整型表达式) { case 整型常量1: 语句1; break; case 整型常量2: 语句2; break; ... default: 语句n; break; }其中,整型表达式可以是确定值为整型的表达式,而整型常量可以是整数、字符或枚举类型。
每个 case 分支表示一种可能的情况,default 分支则表示当所有的 case 都不符合时需要执行的语句块。当执行 switch 语句时,会将表达式的值和每个 case 分支的常量值进行比较。如果匹配成功,则执行该 case 分支的语句块;如果匹配不成功,则执行 default 分支的语句块(如果有的话)。
每个 case 分支的语句块结束后,需要使用 break 语句来终止整个 switch 语句的执行,否则会继续执行下一个 case 分支的语句块。
switch 语句的执行步骤如下:
- switch 会先计算括号内的整型表达式结果。
- 依次对比 case 中的常量,是否等于整型表达式的结果。若不相等,对比下一个 case;若相等,跳转到这个 case。
- 若没有相等的,跳转到 default。
switch 的使用如下图所示:

图 1 switch示例
switch 语句的几个注意事项:
- switch 后面的括号里面只能填一个整型表达式。
- case 后的常量不能有重复的。
- 可以没有 default。
switch中break的功能
在下面的实例中,每个 case 后面的 break 都被删除了。#include <stdio.h> int main() { char c; scanf("%c", &c); switch(c) { case 'a': printf("alpha\n"); case 'b': printf("bravo\n"); case 'c': printf("charlie\n"); case 'd': printf("delta\n"); case 'e': printf("echo\n"); case 'f': printf("foxtrot\n"); case 'g': printf("golf\n"); default: printf("i don't know\n"); } return 0; }运行该代码并在控制台中输入 'e',看看会有什么结果:
e
echo
foxtrot
golf
i don't know
实际上,switch 在找到对应的 case 后,会从对应的 case 处开始执行,并会执行完之后的所有 case,除非遇到 break 才会跳出整个 switch。
为了使代码按照预期执行,需要在代码中加上 break。我们在代码的第 6 个 case 中,即 'f' 处加上 break:
#include <stdio.h> int main() { char c; scanf("%c", &c); switch(c) { case 'a': printf("alpha\n"); case 'b': printf("bravo\n"); case 'c': printf("charlie\n"); case 'd': printf("delta\n"); case 'e': printf("echo\n"); case 'f': printf("foxtrot\n"); break; case 'g': printf("golf\n"); default: printf("i don't know\n"); } return 0; }运行结果为:
e
echo
foxtrot
break和continue在switch语句的作用范围
我们知道,break 和 continue 都是可以作用于循环结构的,那么若把循环和 switch 相结合,它们究竟作用于谁呢?1) break的作用范围
在 C语言中,break 关键字可以用于循环语句和 switch 语句中。但是,如果循环语句和 switch 语句同时存在,那么 break 关键字的作用范围是什么呢?让我们以下面的程序为例,考虑 switch 中的 break 能否让 while(1) 循环结束:
#include <stdio.h> int main() { char c; while(1) { scanf("%c", &c); switch(c) { case 'a': printf("alpha\n"); break; case 'b': printf("bravo\n"); break; case 'c': printf("charlie\n"); break; default: printf("i don't know\n"); } getchar(); // 吸收字符'\n' } return 0; }答案是不能。switch 中的 break 只能作用于 switch 语句内部,它的作用是跳出 switch 语句,而不能对 while 语句产生影响。
如果我们将 break 写在 switch 语句外部,那么它将对 while 语句产生影响。我们可以查看下面的实例:
#include <stdio.h> int main() { char c; while(1) { scanf("%c", &c); switch(c) { case 'a': printf("alpha\n"); break; // 这个break 直属于 switch case 'b': printf("bravo\n"); break; // 这个break 直属于 switch case 'c': printf("charlie\n"); break; // 这个break 直属于 switch default: printf("i don't know\n"); } getchar(); // 这个break 直属于 while break; } return 0; }
2) continue的作用范围
和 break 类似,如果循环语句和 switch 语句同时存在,那么 continue 关键字的作用范围是什么呢?分析下面的程序:
#include <stdio.h> int main() { char c; while(1) { scanf("%c", &c); switch(c) { case 'a': printf("alpha\n"); break; case 'b': printf("continue\n"); getchar(); continue; printf("bravo\n"); // 这句代码不会被执行 break; case 'c': printf("charlie\n"); break; default: printf("i don't know\n"); } getchar(); } return 0; }输出结果为:
b
continue