C语言的switch分支选择语句
switch
本身作为分支选择语句主要是为了多个分支选择,其实它的语句用前面提到的if..else if..else if...else
也可以解决,不过总归会比较冗长,相比较而言,switch
语句看起来短小精悍,容易理解。
最容易理解用来使用switch语句的为计算学生分数,比如输入A
就证明分数在85~100
分,输入B
就证明分数在70-85
,输入C
勉强通过为60-70
分,输入D
,不好意思,还不到60
分了。
swtich分支选择语句
一般形式如下:
1 2 3 4 5 6 7 8 9
| switch(表达式) { case 表达式1:语句1; case 表达式2:语句2; ... case 表达式n-1:语句n-1; case 表达式n:语句n; default:语句n+1; }
|
这个语句的具体含义为:
- 首先判断表达式;
- 如果表达式为表达式1,就执行语句1;
- 如果表达式为表达式2,就执行语句2;
- 以此类推
- default语句为默认不满足任何语句的时候执行的语句
这里有一个特别需要注意的,就是每一个语句最后都要加上break,切记,不然执行的结果并不一定是你认为的那样,因为在每个表达式,它没有跳出来。
简单举几个例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h>
int main() { int score; score = 'A';
switch (score) { case 'A': printf("Wow, Awesome!!\n"); case 'B': printf("Yeah, Great!!\n"); case 'C': printf("Ok, passed!!\n"); case 'D': printf("Sorry, you lose it!!\n"); }
return 0; }
|
这个例子有一个最大的不足在于如果不满足上面说的四种情况,需要一个default语句来处理异常情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <stdio.h>
int main() { int score; score = 'A';
switch (score) { case 'A': printf("Wow, Awesome!!\n"); case 'B': printf("Yeah, Great!!\n"); case 'C': printf("Ok, passed!!\n"); case 'D': printf("Sorry, you lose it!!\n"); default: printf("BAD input\n"); }
return 0; }
|
这个例子的问题就在于每一个语句最后没有跟break语句,导致每个执行都会有输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <stdio.h>
int main() { int score; score = 'A';
switch (score) { case 'A': printf("Wow, Awesome!!\n"); break; case 'B': printf("Yeah, Great!!\n"); break; case 'C': printf("Ok, passed!!\n"); break; case 'D': printf("Sorry, you lose it!!\n"); break; default: printf("BAD input\n"); break; }
return 0; }
|
完美的switch就应该是这个样子了,😁。
相应地Makefile如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
ALL : switch1 switch2 switch3
switch1 : switch1.c gcc -o switch1 switch1.c
switch2 : switch2.c gcc -o switch2 switch2.c
switch3 : switch3.c gcc -o switch3 switch3.c
.PHONY : clean
clean: rm -f switch1 switch2 switch3
|
输入make
,然后执行各个程序输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ ./switch1 Wow, Awesome!! Yeah, Great!! Ok, passed!! Sorry, you lose it!!
$ ./switch2 Wow, Awesome!! Yeah, Great!! Ok, passed!! Sorry, you lose it!! BAD input
$ ./switch3 Wow, Awesome!!
|