有关C语言 switch语句的例题讲解

#include <stdio.h>
main()
{
int a=2,b=7,c=5;
switch(a>0)
{
case 1:switch(b<0)
{
case 1:printf("@");break;
case 2:printf("!");break;
}
case 0:switch(c==5)
{
case 0:printf("*");break;
case 1:printf("#");break;
case 2:printf("$");break;
}
default:printf("&");
}
printf("\n");
}
为什么执行完case1后执行case0,并且在执行case1??
求高手来解答!!!!

格式太 不好了,我给你弄了下很清楚明显了,希望以后一定要注意格式,这样不仅美观,而且对找问题很有帮组:
void main()
{
int a=2,b=7,c=5;
switch(a>0)
{
case 1:
switch(b<0) //b明显大于0,所以这里的判断b<0得到的结果明显为假,也就是0,而下面的case里面只有1,2所以都不满足
{
case 1:printf("@");break;
case 2:printf("!");break;
//上面2个条件都不满足,而后面又没有break等,所以顺序执行下面的语句
}
case 0: //也就是到这里来了
switch(c==5) //c明显等于5,所以这里得到的结果真,也就是1
{
case 0:printf("*");break;
case 1:printf("#");break; //满足这个条件,然后打印“#”,并break推出
case 2:printf("$");break;
}
default:printf("&");
}
printf("\n");
}追问

恩恩,知道这个格式,但是在C++里边默认的就是这种格式,可在哪调整呢?还有我想分部编译就是按那个小手,可是以后就不会了,我是新手。

追答

你用vc的话,F9是设置断点,也就是程序运行到这里就停,然后按F10,就是一步一步的运行,就可以很清楚的知道怎么运行的了,以及当时的变量值都是多少

追问

还有就是运行了几步后出现 find symbols 后来又有一个 find resources 是什么意思撒

追答

虾米,你把提示信息,弄出来我看下。
find symbols 字面意思是 找符号
find resources 找资源

追问

这是一个

追答

这个是你资源的问题了,你可能哪里写了要加载资源,你程序本身没问题

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-30
switch case是顺序执行的,只要case成立,没有break,那么会一直顺序执行下去,直到遇到break。所以第一个case1成立之后开始switch(b<0),但是后面没有遇到break,所以继续执行case0,在case0之后执行switch-case1 遇到了break,这样最外面的switch暂停。
举个例子吧:
int a=0;int b=0;
switch(a)
{case 0:b++;
case 1:b++
case 2:b++;
default :printf("default");
}//执行完毕之后b应该是3
第2个回答  2011-07-30
如果没有break语句,那么上一个case执行完了就会接着执行下一个case,而不管case条件是否满足。
这里第一层switch语句a>0成立,也就是表达式值为1,所以跳转到case 1处,case 1下面的第二层switch语句b<0不成立,表达式值为0,没有符合的case,也没有default,结束,顺序执行第一层switch语句的case 0(因为case 1没有break), 第二层switch语句条件为c==5成立,表达式值为1,跳转到case 1,输出"#",break跳出第二层switch语句,顺序执行第一层switch语句的default(仍然是没有break),输出"&"
第3个回答  2011-07-30
因为case1后面没有break。就会继续像后面执行。break的作用就是向外一层终止循环。
第4个回答  2011-07-30
C语言的switch 因为你的第一个case 1:没有break
相似回答