首先,switch执行规则是:
判断case后面的表达式和switch后面的表达式是否相匹配,一旦case匹配,就会顺序执行后面的所有的程序代码(不管后面的case是否匹配,都执行),直到遇见break或者语句块结束。
其次,说说我的结论:把default当做一个特殊的case语句(default的条件为:switch中的值不满足其他任何case),按照上述switch处理case语句的规则执行即可(也就是执行结果和顺序、break有关)
下面分5种情况讨论,主函数如下:
也就是x依次从0到6,看看switch...case...default...语句的运行结果。
void main()
{
int x=0;
printf("choice1:\n");
for(x=0;x<=6;x++)
{
printf("\nx=%d\n",x);
choice1(x);
}
printf("\nchoice2:\n");
for(x=0;x<=6;x++)
{
printf("\nx=%d\n",x);
choice2(x);
}
printf("\nchoice3:\n");
for(x=0;x<=6;x++)
{
printf("\nx=%d\n",x);
choice3(x);
}
printf("\nchoice4:\n");
for(x=0;x<=6;x++)
{
printf("\nx=%d\n",x);
choice4(x);
}
printf("\nchoice5:\n");
for(x=0;x<=6;x++)
{
printf("\nx=%d\n",x);
choice5(x);
}
}
(1)case中没有break语句,default放在最后,根据执行规则即可。
void choice1(int x)
{
switch(x)
{
case 1: printf("1:%d\n",x);
case 2: printf("2:%d\n",x);
case 3: printf("3:%d\n",x);
case 4: printf("4:%d\n",x);
case 5: printf("5:%d\n",x);
default: printf("default:%d\n",x);
}
}
(2)case中有break语句,default放在最后,根据执行规则即可。
void choice2(int x)
{
switch(x)
{
case 1: printf("1:%d\n",x);break;
case 2: printf("2:%d\n",x);break;
case 3: printf("3:%d\n",x);break;
case 4: printf("4:%d\n",x);break;
case 5: printf("5:%d\n",x);break;
default: printf("default:%d\n",x);
}
}
(3)case中没有break语句,default放在最前面
void choice3(int x)
{
switch(x)
{
default: printf("default:%d\n",x);
case 1: printf("1:%d\n",x);
case 2: printf("2:%d\n",x);
case 3: printf("3:%d\n",x);
case 4: printf("4:%d\n",x);
case 5: printf("5:%d\n",x);
}
}
运行结果如下:
choice3:
x=0
default:0
1:0
2:0
3:0
4:0
5:0
x=1
1:1
2:1
3:1
4:1
5:1
x=2
2:2
3:2
4:2
5:2
x=3
3:3
4:3
5:3
x=4
4:4
5:4
x=5
5:5
x=6
default:6
1:6
2:6
3:6
4:6
5:6
和我的结论符合,当x=0或者x=6时,不满足其他case条件(1~5),执行default语句,因为没有break语句,所以从default开始一直执行到最后。
(4)case中有break语句,default放在最前面,但是default语句没有break,所以如果default语句满足的话,也会执行case 1后面的语句直到break
void choice4(int x)
{
switch(x)
{
default: printf("default:%d\n",x);
case 1: printf("1:%d\n",x);break;
case 2: printf("2:%d\n",x);break;
case 3: printf("3:%d\n",x);break;
case 4: printf("4:%d\n",x);break;
case 5: printf("5:%d\n",x);break;
}
}
运行结果如下:
choice4:
x=0
default:0
1:0
x=1
1:1
x=2
2:2
x=3
3:3
x=4
4:4
x=5
5:5
x=6
default:6
1:6
(5)case中有break语句,default放在最前面,default语句也有break。这时候default的位置就没有任何关系了。就相当于无论如何,只能执行一种case情况(default是特殊的case)。
void choice5(int x)
{
switch(x)
{
default: printf("default:%d\n",x);break;
case 1: printf("1:%d\n",x);break;
case 2: printf("2:%d\n",x);break;
case 3: printf("3:%d\n",x);break;
case 4: printf("4:%d\n",x);break;
case 5: printf("5:%d\n",x);break;
}
}
运行结果如下:
choice5:
x=0
default:0
x=1
1:1
x=2
2:2
x=3
3:3
x=4
4:4
x=5
5:5
x=6
default:6