当我们需要通过单一的表达式,将程序分成多个分支的时候,可以使用 switch 语句,这样可以使程序的可读性更高。
switch语句
我们可以看这样一段代码
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if (1 == n)
{
printf("星期一\n");
}
else if (2 == n)
{
printf("星期二\n");
}
else if (3 == n)
{
printf("星期三\n");
}
else if (4 == n)
{
printf("星期四\n");
}
else if (5 == n)
{
printf("星期五\n");
}
else if (6 == n)
{
printf("星期六\n");
}
else if (7 == n)
{
printf("星期日\n");
}
else
{
printf("输入错误!\n");
}
return 0;
}
当我们用if....else if ... else 的形式来判断输入输出时,就显得多余复杂了,那如果使用switch语句来实现会简洁许多。
switch语句的结构
switch(整型表达式) {
case 整形常量表达式:
语句;
}
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0; }
像"case 1 :" 这样用来表示程序跳转的标识称为标签。
注意:
1和 : 之间有没有空格都可以,但是case 和 1 之间必须有空格。
标签的值必须为常量,不可以为变量。
不允许多个标签同为一个值。
在switch语句中的break
在上述代码中,我们第一次接触到break 语句, 在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
break 有“打破”“脱离”的意思,在执行完break语句后,程序就会跳出将它围起来的switch语句
如果我们没有加上break,会出现什么情况呢?
可以看到,当我们输入1的时候,程序打印完“星期一”后,并没有停下来,而是继续向下执行,直到程序结束。
default语句
如果表达式的值和所有的case标签的值都不匹配怎么办呢?
程序并不会终止,也不会报错,只是跳过了所有语句。
拿上面的代码举例:
程序跑起来后,输入8,没有标签可以和8匹配,但是程序仍然正常运行。
如果加上default语句呢?
可以看到程序执行后,发现前面的标签和8都不匹配,程序就自动跳到default语句并执行了。
所以在每个switch语句中加入一条default语句是个好习惯,甚至可以在后边再加一个break语句。
if语句 和 switch语句 ,都是用来实现程序流程选择性分支的,因此统称为选择语句。