C语言中的switch语句是if-else-if梯度语句的一种替代方式,它允许我们根据一个称为switch变量的单个变量的不同可能值执行多个操作。在这里,我们可以为单个变量的不同值定义多个case中的语句。
C语言中switch语句的语法如下:
switch(expression){
case value1:
//要执行的代码;
break; //可选的
case value2:
//要执行的代码;
break; //可选的
......
default:
//如果所有的case都不匹配,则执行的代码;
}
C语言中switch语句的规则
-
switch表达式必须是整数或字符类型。
-
case值必须是整数或字符常量。
-
case值只能在switch语句内部使用。
-
switch case中的break语句是可选的。如果在case中没有找到break语句,匹配的case之后的所有case都会被执行。这被称为C语言switch语句的"穿透"状态。
让我们通过示例来理解。假设有以下变量:
int x, y, z;
char a, b;
float f;
switch case语句的工作原理
首先,计算switch语句中指定的整数表达式的值。然后,逐个将该值与不同case中给定的常量值进行匹配。如果找到匹配的情况,那么将执行该case中指定的所有语句,以及该case之后的所有case,包括default语句。两个case不能具有相同的值。如果匹配的case包含break语句,则会跳过之后的所有case,并且控制流会退出switch语句。否则,将执行匹配的case之后的所有case。
让我们看一个C语言switch语句的简单示例。
#include<stdio.h>
int main() {
int number = 0;
printf("请输入一个数字: ");
scanf("%d", &number);
switch(number) {
case 10:
printf("数字等于10");
break;
case 50:
printf("数字等于50");
break;
case 100:
printf("数字等于100");
break;
default:
printf("数字不等于10、50或100");
}
return 0;
}
输出:
请输入一个数字: 4
数字不等于10、50或100
请输入一个数字: 50
数字等于50
#include <stdio.h>
int main() {
int x = 10, y = 5;
switch (x > y && x + y > 0) {
case 1:
printf("hi");
break;
case 0:
printf("bye");
break;
default:
printf("Hello bye");
}
return 0;
}
输出:
hi
C语言中的switch语句具有"穿透"特性
这意味着如果在switch case中没有使用break语句,那么匹配的case之后的所有case都将被执行。
#include<stdio.h>
int main() {
int number = 0;
printf("请输入一个数字:");
scanf("%d", &number);
switch(number) {
case 10:
printf("数字等于10\n");
case 50:
printf("数字等于50\n");
case 100:
printf("数字等于100\n");
default:
printf("数字不等于10、50或100");
}
return 0;
}
输出:
请输入一个数字:10
数字等于10
数字等于50
数字等于100
数字不等于10、50或100
输出:
请输入一个数字:50
数字等于50
数字等于100
数字不等于10、50或100
嵌套的 switch case 语句
我们可以在 switch 语句中使用任意多的 switch 语句。 这种类型的语句称为嵌套 switch case 语句。 考虑以下示例。
#include <stdio.h>
int main() {
int i = 10;
int j = 20;
switch (i) {
case 10:
printf("外部switch中i的值为: %d\n", i);
case 20:
switch (j) {
case 20:
printf("嵌套switch中j的值为: %d\n", j);
}
}
printf("i的确切值为: %d\n", i);
printf("j的确切值为: %d\n", j);
return 0;
}
输出:
外部switch中i的值为: 10
嵌套switch中j的值为: 20
i的确切值为: 10
j的确切值为: 20
在这个例子中,我们使用了嵌套的switch case语句。外部的switch语句根据变量i
的值进行匹配,如果匹配到指定的case,就会执行相应的语句。在其中一个case中,我们有另一个switch语句,用来匹配变量j
的值。如果匹配到指定的case,就会执行相应的语句。
最后,在嵌套的switch case之后,程序会继续执行嵌套外部switch之外的代码。