1. switch 语句
C语言中的switch语句测试表达式中变量的值,并依次和其与多种情况比较。 一旦找到匹配,就会执行与该匹配指定的语句块。
switch 语句允许我们在许多备选方案中执行一个代码块。
你可以用 if…else..if 梯子做同样的事情。但是,switch 语句的语法更容易读写。
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
如果未找到表达式变量匹配的值,则执行默认语句,控制将退出switch语句。
C 语言中 switch 语句的语法:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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; |
switch 语句中的 expression 是一个常量表达式,必须是一个整型或字符类型。
在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值(value-1, value-2, … value-n) 和一个冒号。
case 的 常量值(value-1, value-2, … value-n) (必须与 switch 中的expression变量具有相同的数据类型,且必须是一个常量。
当被测试的变量等于 case 中的常量时,case 后跟的语句(Block-1, or Block-2, or Block-n)将被执行,直到遇到 break 语句为止。
当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行(Statement-x)。
每一个 case 都需要包含 break(我们主张,但如果没有break也行,程序变复杂)
一个 switch 语句可以有一个可选的 默认 case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。
default case 中的 break 语句不是必需的。
下面图可以看出各个case的选择和控制流如何退出。


例1.1 简单的计算器
// Program to create a simple calculator
#include <stdio.h>
int main() {
char operation;
double n1, n2;
printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operation);
printf("Enter two operands: ");
scanf("%lf %lf",&n1, &n2);
switch(operation)
{
case '+':
printf("%.1lf + %.1lf = %.1lf",n1, n2, n1+n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf",n1, n2, n1-n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf",n1, n2, n1*n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf",n1, n2, n1/n2);
break;
// operator doesn't match any case constant +, -, *, /
default:
printf("Error! operator is not correct");
}
return 0;
}
|
1 2 3 4 |
Enter an operator (+, -, *, /): - Enter two operands: 32.5 12.4 32.5 - 12.4 = 20.1 |
用户输入的 – 运算符存储在操作变量中。并且,两个操作数 32.5 和 12.4 分别存储在变量 n1 和 n2 中。
由于操作为-,程序的控制跳转到
|
1 |
printf("%.1lf - %.1lf = %.1lf", n1, n2, n1-n2); |
最后,break 语句终止 switch 语句。
例1.2 检查一个整数是否是8
#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;
}
结果:
|
1 |
Value is 8 |

- 赋予初始化整数变量num的值为8;
- switch语句开始把每个case的值和存储在变量num中的值进行比较;
- 在该程序中,由于存储在变量num中的值为8,到case 8后, num 找到匹配的值,执行打印语句然后break退出。
例1.3.把一个1-7内的整数用文字表示出来
main(){
int a;
printf("input integer number between 1 - 7: ");
scanf("%d",&a);
switch (a)
{
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
default:
printf("error\n");
break;
}
}
如果不用“break”,该程序会执行后面所有语句。

例1.4.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");
}
}
结果

2.嵌套switch语句
顾名思义,嵌套switch语句是switch语句里面还有switch语句。
例2.1 查验用户名和密码
#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;
}
}
scanf 命令把标准输入的字符或整数存入到变量的地址内。

初始化的两个整数变量:ID和密码
外部switch语句比较ID输入值,执行与其值匹配的语句块(当ID == 500时)
ID正确的情况下,则利用内部switch语句比较password的输入的值,并执行与匹配的大小相链接的语句(当password == 000时),如果密码不正确,将打印出密码不正确。
如果ID输入不正确,程序将打印出ID不正确。就不进入内部switch语句。
为什么需要switch语句?
if-else语句存在一个潜在问题,即每当替代路径的数量增加时,程序的复杂性就会增加。 如果在程序中使用多个if-else构造,则程序可能会变得难以阅读和理解。
甚至可能使编写程序的开发人员自己都感到困惑。解决此问题的方法是switch语句,简单明了。
摘要:
- switch语句是 C语言的决策确定(decision making)语句;
- 涉及多个决策的程序中使用switch语句;
- switch必须包含可执行的expression;
- 每个case必须包含一个break;
- case value必须是常量且唯一;
- 默认是可选的;
- 多个switch语句可以相互嵌套。