switch语句也是一种分支语句,常常用于多分支的情况。
switch语法结构
switch(整型表达式)
{
语句项;
}
什么是语句项?语句项是一些case语句,如下:
case 整型常量表达式:
语句;
具体怎么用switch?case&break
用switch写一段代码,输入1-7任意一个整数,输出对应的星期数
int main()
{
int day = 0;
scanf_s("%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;
}
按照上面的理解,我们写出这样的代码,编译运行之后的结果首先让我们输入一个整数,我们输入2
理想显示结果 | 现实现实结果 |
![]() | ![]() |
当我们输入2时,理想应当输出星期二,可实际情况却是输出星期二到星期日,这是因为,我们虽然给予了代码运行的入口,但我们并没有限制运行出口,所以我们需要将代码稍作调整。
int main()
{
int day = 0;
scanf_s("%d", &day);
switch(day)
{
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决定了代码入口;break决定代码出口,即跳出某一个分支。
一定都需要break嘛?
试着打出一段代码,输入1-5时输出工作日,6-7时输出休息日。
int main()
{
int data = 0;
scanf_s("%d", &data);
switch (data)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
以上就是正确代码,case1-case5是不需要加break的,所以,break是需要视实际情况而定的。
注:虽然case6-case7之后不需要break代码也能成功运行,但是在末尾加上break是一种好的习惯。
switch-default
那么,加入输入数值是9,将会运行什么呢?
答案当然是什么都没有,因为我们并没有给予出了输入1-7之外的数值输出的结果,此时,要想输入其他不相关的数值显示输入无效该怎么修改代码呢?此时就引入default啦!
int main()
{
int data = 0;
scanf_s("%d", &data);
switch (data)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入无效\n");
break;
}
return 0;
}
当我们编译运行之后,输入除了1-7之外的数值,就会显示输入无效了
注:只要是符合自身代码需求,default与case的顺序没有一定要求。
每个switch语句中只能出现一条default子句
理解题
理解下列题,并尝试分析出最后运行的m,n是多少?
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
switch (n)
{
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。
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;//n=1,m=2+1=3
case 2:n++;//n=1+1=2,m=3
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++; n++;//m=3+1=4,n=2+1=3
break;
}
case 4:
m++;//m=4+1=5,n=3
break;
default:
break;
}
printf("m=%d,n=%d\n", m, n);
return 0;
}