c语言switch语句

有以下程序
int x=1,y=0,a=0,b=0;
switch (x)
{case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2: a++,b++;break;
case 3:a++,b++;
}
printf("a=%d,b=%d\n",a,b)
运行结果为a=2,b=1
请注意我打问号的地方!!!!
请注意看以下解析:
首先进入第一个switch(x)语句判断,进入case1中进行嵌套判断switch(y)也成立a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break结束此循环,此时a=2,b=1

a的自加是先执行后在自加,当此程序a自加的时候没有执行其他语句啊??????

另外!!!!!!
我的课本上说:计算switch后括号内表达式的值然后用该值逐个与case后的常量表达式进行比较,当找到匹配的值时就执行该case后面的语句。所有case中没有匹配的就执行default后面的语句

但是实际操作和上面的解析中并没有像书上所说的执行啊,执行完第一个后a的值为1 为什么有执行case 2了呢???????????a的值又不等于2
在执行case的时候是不是要判断case后面的值啊,怎么判断?????????

第1个回答  2019-08-23
((int)(fs/10))
//显示类型转换
把float转换为int类型

case
8:
n8=++n8;
//
如果((int)(fs/10))等于8
那么n8=++n8 就是n8要+1
break;
//退出switch语句
你的switch貌似写错了哦
下面的case
2个同理

default
:n1=++n1
//如果上面的条件都不满足
则执行
default
:n1=++n1
语句
第2个回答  2019-06-25
输出结果是:passwarn
因为switch(n++)n先参加运算再增,n就是'c',执行printf("pass")语句,由于没有break语句,接着执行printf("warn"),得结果。
上面回答不对,n可以是数字也可以是字符常量。这程序我用VC测试了,没有问题。
第3个回答  2019-10-14
什么问题
n++,这里n是数字,后面的条件永远不会实现
char
n;
#include
main()
{
char
n='c';
switch(++n)//n++也不会粗,两个产生的是不同的结果,楼主自己比较下,别懒,问题也要说下
{
default:
printf("error");break;
case'a':case'A':case'b':case'B':printf("good");break;
case'c':case'C':printf("pass");
case'd':case'D':printf("warn");
}
getch();
}
第4个回答  2008-09-09
a++单独存在时,会整个一起执行,所以会自增1,先执行在自加是在赋值的情况下才发生的啊,
另外你的case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
后面根本就没有break 程序当然要接着往下执行case 2 直到遇到break中止,case 3不执行.
第5个回答  2008-09-09
谭浩强的那本上明明提过
"执行完一个CASE后面的语句,流程控制转移到下一个CASE继续执行.'CASE常量表达式'只是起语句标号作用,并不是在该处进行调教判断."

当从嵌套出来以后 由于CASE 1后面没有BREAK 所以继续执行CASE 2 直到有一个BREAK 为止
相似回答