switch...case...default...执行顺序

来源:互联网 发布:空调遥控器软件 编辑:程序博客网 时间:2024/06/05 20:24

首先,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=0default:01:02:03:04:05:0x=11:12:13:14:15:1x=22:23:24:25:2x=33:34:35:3x=44:45:4x=55:5x=6default:61:62:63:64:65: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=0default:01:0x=11:1x=22:2x=33:3x=44:4x=55:5x=6default:61: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=0default:0x=11:1x=22:2x=33:3x=44:4x=55:5x=6default:6
0 0
原创粉丝点击