switch…case in C (Switch Statement in C) with Examples
什么是 C 中的 Switch 语句?
C 中的 switch 语句 测试变量的值并将其与多个案例进行比较。一旦找到 case 匹配,就会执行与该特定 case 相关联的语句块。
交换机块中的每个案例都有不同的名称/编号,称为标识符。将用户提供的值与 switch 块内的所有 case 进行比较,直到找到匹配项。
如果没有找到 case 匹配,则执行 default 语句,控制退出 switch 块。
在本教程中,您将学习-
- 什么是 C 中的 Switch 语句?
- 切换大小写语法
- Switch 语句流程图
- C 中的切换案例示例
- C 中的嵌套开关
- 为什么我们需要 Switch 机箱?
- switch语句的规则
切换案例语法
如何在“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 是用于单独识别每个案例的案例标签。请记住,案例标签不应相同,因为它可能会在执行程序时产生问题。假设我们有两个标签与“1”相同的案例。然后在执行程序时,即使您希望程序执行第二个案例,也会执行首先出现的案例。这会在程序中产生问题,并且无法提供所需的输出。
- 大小写标签始终以冒号 ( :) 结尾。这些案例中的每一个都与一个块相关联。
- 一个块只不过是针对特定情况分组的多个语句。
- 每当执行 switch 时,都会将 test-expression 的值与我们在 switch 中定义的所有 case 进行比较。假设测试表达式包含值 4。将该值与所有案例进行比较,直到在程序中找到标签为 4 的案例。一旦找到一个案例,就会执行与该特定案例相关联的语句块,并且控制权会脱离开关。
- 每个 case 中的 break 关键字表示特定 case 的结束。如果我们不在每个 case 中都设置 break,那么即使执行了特定的 case,C 中的 switch 也会继续执行所有 case,直到结束。这不应该发生;因此,我们总是必须在每种情况下放置 break 关键字。 Break一旦执行就会终止case,控制权就会脱离开关。
- 默认情况是可选的。每当 test-expression 的值与 switch 内的任何 case 都不匹配时,就会执行默认值。否则不需要在switch中写default。
- 一旦执行开关,控制将转到语句-x,程序的执行将继续。
Switch 语句流程图
下图说明了如何在 switch case 中选择 case:
C 中的切换案例示例
下面的程序说明了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
- 在给定的程序中,我们解释了初始化一个值为 8 的变量 num。
- switch 构造用于比较存储在变量 num 中的值,并执行与匹配的 case 相关联的语句块。
- 在这个程序中,由于变量 num 中存储的值为 8,switch 将执行 case-label 为 8 的 case。执行完 case 后,控制权将脱离 switch,程序会以通过在输出屏幕上打印值来获得成功的结果。
尝试改变变量 num 的值,注意输出的变化。
例如,我们考虑以下默认的程序:
#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 进行分组。您需要在每种情况下都引入一个 break 语句,以便在 switch 语句的末尾进行分支。
当没有其他匹配时运行可选的默认情况。
我们考虑以下 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 中的嵌套开关
在 C 语言中,我们可以将内部开关嵌入到外部开关中。另外,内部开关和外部开关的大小写常量可以有共同的值,并且没有任何冲突。
我们考虑以下程序,用户输入自己的 ID,如果 ID 有效,它将要求他输入密码,如果密码正确,程序将打印用户名,否则,程序将打印错误密码,如果ID不存在,程序会打印Incorrect 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 和密码
- 外部开关构造用于比较变量 ID 中输入的值。它执行与匹配案例相关的语句块(当 ID==500 时)。
- 如果块语句以匹配的大小写执行,则使用内部开关比较变量密码中输入的值,并执行与匹配大小写关联的语句(当密码==000时)。
- 否则,switch case 将触发默认 case 并打印有关程序大纲的适当文本。
为什么我们需要 Switch 机箱?
if-else 语句存在一个潜在问题,即每当替代路径的数量增加时,程序的复杂性就会增加。如果在程序中使用多个 if-else 结构,程序可能会变得难以阅读和理解。有时甚至会迷惑自己编写程序的开发者。
这个问题的解决方法就是switch语句。
switch语句的规则
- 表达式必须始终执行到结果。
- 案例标签必须是常量且唯一。
- 大小写标签必须以冒号 ( :) 结尾。
- 在每种情况下都必须有一个 break 关键字。
- 只能有一个默认标签。
- 我们可以嵌套多个 switch 语句。
总结
- 开关是“C”中的决策结构。
- 在涉及多个决策的程序中使用开关。
- 开关必须包含可执行的测试表达式。
- 每个 case 都必须包含一个 break 关键字。
- 大小写标签必须是常量且唯一。
- 默认是可选的。
- 多个 switch 语句可以相互嵌套。
C语言