C语言 答案不能理解

来源:百度知道 编辑:UC知道 时间:2024/05/31 23:50:28
下面程序的输出结果为**0** **2** 为什么会这样?????????
#include <stdio.h>
void main()
{ int a=1,b=0;
switch(a)
{ case 1: switch (b)

{ case 0: printf("**0**"); break;
case 1: printf("**1**");break;
}
printf("**2**"); break;
}
}

这个是一个嵌套SWITCH语句
switch(a)与case1 相等进入第2个switch语句 b与 0相等
输出 **0**
但是你在倒数第4行没加;break; 没加的话他就会直接执行倒数第3行.
========看看下面这个程序========
#include <stdio.h>
void main()
{ int a=1,b=0;
switch(a)
{ case 1: switch (b)

{ case 0: printf("**0**"); break;
case 1: printf("**1**");break;
};break;
printf("**2**"); break;
}
}

break只能退出一层,改成如下就只输出0啦
#include <stdio.h>
void main()
{ int a=1,b=0;
switch(a)
{ case 1:
{switch (b)

{ case 0: printf("**0**"); break;
case 1: printf("**1**");break;
}
break;
}
printf("**2**"); break;
}
}

本来就是这样啊……
先switch a
a = 1
所以进 case 1
case 1 要 switch b
b = 0
所以就print **0** 然后离开
然后还有一个print **2** 才离开
所以不就 **0****2** 咯。

print **2** 属于 switch a case 1的其中一部分