switch语句
在一些实际问题中,分类情况特别的多,如果用if语句的嵌套,层数太多,容易出错,这时我们就该用switch语句
switch语句的一般格式为
switch(表达式)
{
case:常量表达式1:语句组1;[break];//可加可不加
case:常量表达式2:语句组2;[break];
·····
case:常量表达式n:语句组n;[break];
[default:语句组n+1]
}
在执行过程中:先计算表达式的值,然后从前往后依次case子句中所列出的各个常量表达式的值进行比较,若表达式的值与常量中的值相等,就开始进入相应的case后面的语句执行,遇到后续的case也不再进行判断(默认匹配),直至遇到break或语句结束。default表示与表达式和所有常量表达式都不匹配,那么就执行default语句组。如果都不匹配那么不需要执行任何语句,则default可以省略
接下来我们来看两组代码
#include<cstdio>
int main()
{
char a;
scanf("%c",&a);
switch(a)
{
case'+':printf("+");break;
case'-':printf("-");break;
case'*':printf("*");break;
case'/':printf("/");break;
default:printf("input invalid");
}
return 0;
}
这是第一组,思考一下输入“-”会输出啥
接下来看第二组代码
#include<cstdio>
int main()
{
char a;
scanf("%c",&a);
switch(a)
{
case'+':printf("+");
case"-":printf("-");
case"*":printf("*");
case"/":printf("/");
default:printf("input invalid");
}
return 0;
}
思考这组代码输入“-”会输出啥
两组代码代码上面有什么区别,而输出又有什么区别?答案我们后面公布
切记:使用·switch语句时要注意以下几点:
1.switch后面的表达式,取值只能是整型、字符型、布尔型或枚举型。case后面的常量表达式,其取值类型要和switch后面的表达式类型一致。
2.任意两个case的表达式的值必须各不相同,否则将引起歧义
3.语句组可以是复合语句,也可以是一条语句
4.多个case可以共用一组程序
思考
以下代码分别输入A,B,C会输出啥
#include<cstdio>
int main()
{
char a;
scanf("%c",&a);
switch(a)
{
case'A':
case'B':
case'C':printf("Pass");break;
}
return 0;
}
这题答案是Pass,因为三个case共用一个语句组"printf("Pass");break;"所以输出都
是Pass
我们公布一下第一题的答案:只有"-"
第二题的答案:"-*/input invalid"
两者代码的差别是:第一个每个case后面都有break
第二个是只有最后的default才有break
好了
这节课就讲到这里