switch语句也是一种分支语句,常常用于多分支的情况。
比如:
输入1,就会输出星期一
输入2,就会输出星期二
…
输入7,就会输出星期七
对于这样的代码需求,如果用if 、else if、else的形式就会显得太复杂。如何用switch语句实现该功能呢?switch语句的结构又是怎样的呢?
switch(整型表达式)
{
语句项;
}
其中,整型表达式必须为整型,且为常量(字符也可以,因为字符也属于是整型的一种,因为字符存储的时候用的是字符的ASCII码值);语句项是一些case语句。
case 整型常量表达式;
语句;
代码实现:
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期日\n");
}
return 0;
}
运行该代码,发现运行之后得到的结果如下:
1
星期一
星期二
星期三
星期四
星期五
星期六
星期日
显然,这样的结果是不对的。因为执行完case 1 之后,没有东西阻止它,它就会一直case 2、case 3…地执行下去。若在程序运行的时候,输入的是6,就会输出 星期六星期日。switch后面的表达式(day)是几,它就会从case 几进去,决定入口的是表达式day的值以及case后面的值。
修改程序:在每个case后面加上break,以此来跳出case。
case决定的是入口,而break决定的是出口,这才实现了真正的分支。
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
测试运行结果如下:
5
工作日
break语句的实际效果是把语句列表划分为不同的部分。
有一个编程好习惯:在最后一个case语句的后面也加上一条break语句。万一之后要在原先程序的基础上再加上一些其它case语句,不至于出现上面的输入1,一下子星期一到星期天全部打印出来的情况。
如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结果就是所有的语句都被跳过而已,程序并不会终止,也不会报错。因为这种情况在C语言中并不认为是错误,但是,如果并不想忽略不匹配所有标签的表达式怎么办?这时候就可以在语句列表中增加一句default子句
,将其写在任何一个case标签可以出现的位置。
当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。注意:每个switch语句中只能出现一条default子句。
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
default:
printf("输入错误\n");
break;
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;
}
测试结果:
9
输入错误
4、练习
看程序运行的结果是多少?
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1 :
m++;
case 2:
n++;
case 3:
switch (n)
//switch可以嵌套使用
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m=%d,n=%d\n",m,n);
return 0;
}
主要就是考察switch里面的break的作用。
最终的运行结果如下:
m=5,n=3
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)