本章主要整理一下switch的易错点
明确概念
格式
switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
分析语句
- 表达式的值(注意是值,里面可以进行运算!):必须是整型变量或常量,或者可以被提升为整型的变量(如short、char)或常量(如a'')
- 常量表达式:必须是常量,且必须是整型或者能够提升为整型的值,不能接收变量
- default:可以省略,整个switch在遇到"}"结束
易错点
1、若要在case 分支里定义变量,必须加上一对{},否则该变量作用域不明确会报错,如:
switch(1){
case 1:
int num = 666;
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
}
正确写法:
switch(1){
case 1:
{
int num = 666;
printf("%i\n",num);
break;
}
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
}
2、default可以写在任意位置,无论放在哪里都会等所有case分支不匹配再执行。但若不是写在最后,不能省略break;语句,否则会出现穿透现象,如:
switch(4){
default:
printf("default\n");
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
//打印 default
//打印 1
}
将default调整到最后:
switch(4){
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
default:
printf("default\n");
//打印default
}
3、case 常量表达式的值不可以重复,如
switch(3){
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 1:
printf("3\n");
break;
default:
printf("default\n");
break;
}
会报错!!!
注意点:常量表达式只需要值为常量即可,如2+1 例:
switch(3){
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 2+1:
printf("3\n");
break;
default:
printf("default\n");
break;
}
网友评论