switch 语句
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重
的 else if 改成更易⽤、可读性更好的形式。、
1 switch (expression) {
2 case value1: statement
3 case value2: statement
4 ...
5 default: statement
6 }
注:
- switch 后的 expression 必须是整型表达式
- case 后的值,必须是整形常量表达式
if语句和switch语句的对⽐
1 #include <stdio.h> 2 3 int main() 4 { 5 int n = 0; 6 scanf("%d", &n); 7 if(n%3 == 0) 8 printf("整除,余数为0\n"); 9 else if(n%3 == 1) 10 printf("余数是1\n"); 11 else 12 printf("余数是2\n"); 13 return 0; 14 }
如果使⽤switch语句改写,就可以是这样的:
1 #include <stdio.h>
2
3 int main()
4 {
5 int n = 0;
6 scanf("%d", &n);
7 switch(n%3)
8 {
9 case 0:
10 printf("整除,余数为0\n");
11 break;
12 case 1:
13 printf("余数是1\n");
14 break;
15 case 2:
16 printf("余数是2\n");
17 break;
18 }
19 return 0;
20 }
上述的代码中,我们要注意的点有:
- 1. case 和后边的数字之间必须有空格
- 2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
switch语句中的break
1 #include <stdio.h>
2
3 int main()
4 {
5 int n = 0;
6 scanf("%d", &n);
7 switch(n%3)
8 {
9 case 0:
10 printf("整除,余数为0\n");
11 case 1:
12 printf("余数是1\n");
13 case 2:
14 printf("余数是2\n");
15 }
16 return 0;
17 }
我们发现,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印。这是为什么呢?原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case2 中的语句。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
练习:
输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天
参考代码如下:
1 #include <stdio.h>
2 int main()
3 {
4 int day = 0;
5 scanf("%d", &day);
6switch(day)
7 {
8 case 1:
9 printf("星期⼀\n");
10 break;
11 case 2:
12 printf("星期⼆\n");
13 break;
14 case 3:
15 printf("星期三\n");
16 break;
17 case 4:
18 printf("星期四\n");
19 break;
20 case 5:
21 printf("星期五\n");
22 break;
23 case 6:
24 printf("星期六\n");
25 break;
26 case 7:
27 printf("星期天\n");
28 break;
29 }
30 return 0;
31 }
如果需求发⽣变化,变为:
1. 输⼊1~5,输出的是“⼯作⽇”;
2. 输⼊6~7,输出“休息⽇”
那参考代码如下:
1 #include <stdio.h>
2
3 int main()
4 {
5 int day = 0;
6 scanf("%d", &day);
7 switch(day)
8 {
9 case 1:
10 case 2:
11 case 3:
12 case 4:
13 case 5:
14 printf("⼯作⽇\n");
15 break;
16 case 6:
17 case 7:
18 printf("休息⽇\n");
19 break;
20 }
21 return 0;
22 }
上⾯的练习中,我们发现应该根据实际的情况,来在代码中觉得是否使⽤ break ,或者在哪⾥使⽤
break ,才能正确完成实际的需求。
switch语句中的default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊
default ⼦句。
1 switch (expression) {
2 case value1: statement
3 case value2: statement
4 default: statement
5 }
switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏
default ⼦句。
就⽐如前⾯做的打印星期的练习,如果 day 的输⼊不是1~7的值,如果我们要提⽰:输⼊错误,则可以这样完成代码:
1 #include <stdio.h>
2 int main()
3 {
4 int day = 0;
5 scanf("%d", &day);
6 switch(day)
7 {
8 case 1:
9 case 2:
10 case 3:
11 case 4:
12 case 5:
13 printf("⼯作⽇\n");
14 break;
15 case 6:
16 case 7:
17 printf("休息⽇\n");
18 break;
19 default:
20 printf("输⼊错误\n");
21 break;
22 }
23 return 0;
24 }
switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把 default ⼦句放在最后处理的。