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 语句可以嵌套在一起。