给一个含有嵌套的switch case的一段完整代码:
#include
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("%d %d",m,n);
return 0;
}
代码看起来很简单,但是,如果不时很清楚的了解switch case用法的话,结果还是容易出错。
首先给出它的运行结果:m=5,n=3。当程序走到case 3 的时候,遇到了嵌套的switch case语句,此时m=3,n=2。进入嵌套语句,和switch里面表达式匹配的是case 2,所以程序运行(m++;n++),此时,m=4,n=3。接着,后面遇到break,跳出switch case语句。但是,注意:break跳出的是嵌套的switch case语句,而外面的case 3后面并没有break语句。因此,出了case 3之后程序还需进入case 4,进而m自加,再遇到break语句,然后跳出整个switch case语句。所以。最终得到的m=5,n=3。
附上程序运行结果:
思考:看了这个代码我们又能发现什么,我们需要知道什么?
1.不是所有case语句最后都跟有break。我们起初见到的代码里,基本上每个case最后都跟有break,它是指当switch后面括号里的表达式与哪一个case后面的常亮表达式匹配时,直接进入这个case,执行完里面的语句后,遇到break,直接退出整个switch case语句。实际当中,我们还会碰到类似于上述代码的情况(不是所有case语句最后都跟有break),这个时候,程序总是从匹配的case执行,直到遇到break或者程序走到最后的default结束,退出switch case语句。
2.switch后面括号里的结果必须是整形值。因为这个值是要和case语句后面直接跟的常量表达式进行匹配的。
3.break在switch case语句中主要是将语句划分成不同的部分,方便匹配后跳出switch语句。
4.default的位置并不是固定的。为了使程序正常运行,它放在case之间的时候,后面必须跟上break语句;如果放在最后,可以跟break语句,也可以不跟。