C语言中的switch语句测试表达式中变量的值,并依次和其与多种情况比较。 一旦找到匹配,就会执行与该匹配指定的语句块。一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
如果未找到表达式变量匹配的值,则执行默认语句,控制将退出switch语句。
C 语言中 switch 语句的语法:
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 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
- 可以使用嵌套switch语句
switch 语句的流程图
下面图可以看出各个case的选择和控制流如何退出。
例一:
以下code可以示范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语句开始把每个case的值和存储在变量num中的值进行比较。
- 在该程序中,由于存储在变量num中的值为8,到case 8后, num 找到匹配的值,执行打印语句然后break退出。
例二
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”,该程序会执行后面所有语句。
下列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.
嵌套switch语句
顾名思义,嵌套switch语句是switch语句里面还有switch语句。如以下程序:
例四
#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; } }
这是一个小型的人机对话程序。如果你输入ID500,和password000,机器将显示欢迎你,否则,会显示不正确的ID或密码。
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语句可以相互嵌套。