0%

C语言 switch分支选择语句

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. 首先判断表达式;
  2. 如果表达式为表达式1,就执行语句1;
  3. 如果表达式为表达式2,就执行语句2;
  4. 以此类推
  5. default语句为默认不满足任何语句的时候执行的语句

这里有一个特别需要注意的,就是每一个语句最后都要加上break,切记,不然执行的结果并不一定是你认为的那样,因为在每个表达式,它没有跳出来。

简单举几个例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*beginner/switch/switch1.c*/
#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
/*beginner/switch/switch2.c*/
#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
/*beginner/switch/switch3.c*/
#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
#beginner/switch/Makefile

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!!
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道