C 语言中的 switch…case (C 语言 switch 语句) 及示例
什么是 C 语言中的 Switch 语句?
C 语言中的 Switch 语句会测试一个变量的值,并将其与多个 case 进行比较。一旦找到匹配的 case,就会执行与该特定 case 关联的一组语句。
Switch 语句块中的每个 case 都有一个不同的名称/数字,称为标识符。用户提供的值会与 switch 块内的所有 case 进行比较,直到找到匹配项。
如果未找到 case 匹配项,则执行 default 语句,并将控制权移出 switch 块。
Switch Case 语法
在 'C' 程序中实现 switch-case 的通用语法如下
switch( expression )
{
case value-1:
Block-1;
Break;
case value-2:
Block-2;
Break;
case value-n:
Block-n;
Break;
default:
Block-1;
Break;
}
Statement-x;
- 表达式可以是整数表达式或字符表达式。
- Value-1, 2, n 是 case 标签,用于单独标识每个 case。请记住,case 标签不应相同,因为这可能会在执行程序时产生问题。假设我们有两个具有相同标签“1”的 case。那么在执行程序时,即使您希望程序执行第二个 case,第一个出现的 case 也会被执行。这会在程序中产生问题,并且不会提供所需的输出。
- Case 标签始终以冒号( : )结尾。每个 case 都与一个块相关联。
- 块是指为特定 case 分组的多个语句。
- 每当执行 switch 时,test-expression 的值都会与我们在 switch 中定义的所有 case 进行比较。假设 test expression 包含值 4。此值将与所有 case 进行比较,直到程序中找到标签为四的 case。一旦找到 case,与该特定 case 关联的语句块就会执行,控制权将移出 switch。
- 每个 case 中的 break 关键字表示一个特定 case 的结束。如果我们不在每个 case 中都放置 break,那么即使执行了特定 case,C 语言的 switch 也会继续执行所有 case 直到到达末尾。这种情况不应该发生;因此,我们总是在每个 case 中放置 break 关键字。Break 将在执行完 case 后终止该 case,并将控制权移出 switch。
- default case 是可选的。每当 test-expression 的值与 switch 内的任何 case 不匹配时,将执行 default。否则,不一定需要在 switch 中编写 default。
- 一旦 switch 执行完毕,控制权将转移到 statement-x,程序的执行将继续。
Switch 语句流程图
下图说明了如何在 switch case 中选择一个 case

C 语言中的 Switch Case 示例
下面的程序说明了 switch 的用法
#include <stdio.h>
int main() {
int num = 8;
switch (num) {
case 7:
printf("Value is 7");
break;
case 8:
printf("Value is 8");
break;
case 9:
printf("Value is 9");
break;
default:
printf("Out of range");
break;
}
return 0;
}
输出
Value is 8
- 在给定的程序中,我们已经初始化了一个 变量 num,值为 8。
- 使用 switch 结构来比较变量 num 中存储的值,并执行与匹配 case 关联的语句块。
- 在此程序中,由于变量 num 中存储的值为八,switch 将执行 case 标签为 8 的 case。执行 case 后,控制权将移出 switch,程序将成功终止,并在输出屏幕上打印该值。
尝试更改变量 num 的值并注意输出的变化。
例如,我们考虑以下包含 default 的程序
#include <stdio.h>
int main() {
int language = 10;
switch (language) {
case 1:
printf("C#\n");
break;
case 2:
printf("C\n");
break;
case 3:
printf("C++\n");
break;
default:
printf("Other programming language\n");}}
输出
Other programming language
在 C 语言中使用 switch case 时,您需要为多个具有唯一标签的 case 分组。您需要在每个 case 中引入 break 语句,以在 switch 语句末尾进行分支。
当没有其他匹配项时,可选的 default case 将运行。
我们考虑以下 switch 语句
#include <stdio.h>
int main() {
int number=5;
switch (number) {
case 1:
case 2:
case 3:
printf("One, Two, or Three.\n");
break;
case 4:
case 5:
case 6:
printf("Four, Five, or Six.\n");
break;
default:
printf("Greater than Six.\n");}}
输出
Four, Five, or Six.
C 语言中的嵌套 Switch
在 C 语言 中,我们可以在外部 switch 中嵌入内部 switch。此外,内部 switch 和外部 switch 的 case 常量可以具有相同的值,并且不会产生任何冲突。
我们考虑以下程序,该程序提示用户输入自己的 ID,如果 ID 有效,它会要求用户输入密码,如果密码正确,程序将打印用户的姓名,否则,程序将打印密码错误,如果 ID 不存在,程序将打印 ID 错误
#include <stdio.h>
int main() {
int ID = 500;
int password = 000;
printf("Plese Enter Your ID:\n ");
scanf("%d", & ID);
switch (ID) {
case 500:
printf("Enter your password:\n ");
scanf("%d", & password);
switch (password) {
case 000:
printf("Welcome Dear Programmer\n");
break;
default:
printf("incorrect password");
break;
}
break;
default:
printf("incorrect ID");
break;
}
}
输出
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- 在给定的程序中,我们已经解释了如何初始化两个变量:ID 和 password
- 使用外部 switch 结构来比较 ID 变量中输入的值。它执行与匹配 case(当 ID==500 时)关联的语句块。
- 如果语句块与匹配的 case 一起执行,则使用内部 switch 来比较 password 变量中输入的值,并执行与匹配 case(当 password==000 时)关联的语句。
- 否则,switch case 将触发 default case,并根据程序大纲打印相应的文本。
为什么我们需要 Switch Case?
if-else 语句有一个潜在的问题,那就是当备用路径的数量增加时,程序的复杂性也会增加。如果在程序中使用多个 if-else 结构,程序可能会变得难以阅读和理解。有时甚至会让编写程序的开发人员感到困惑。
解决此问题的方法是使用 switch 语句。
Switch 语句的规则
- 表达式的结果必须始终是可执行的。
- Case 标签必须是常量且唯一的。
- Case 标签必须以冒号( : )结尾。
- 每个 case 都必须包含一个 break 关键字。
- 只能有一个 default 标签。
- 我们可以嵌套多个 switch 语句。
摘要
- Switch 是‘C 语言’中的一种决策构造。
- 当涉及多个决策时,switch 会在程序中使用。
- Switch 必须包含一个可执行的 test-expression。
- 每个 case 都必须包含一个 break 关键字。
- Case 标签必须是常量且唯一的。
- Default 是可选的。
- 多个 switch 语句可以嵌套在一起。


