switch(a>0) {case 1: switch(b>0) { case 0: printf("@");break; case 1: printf("@");break; } } }

在上述c语言程序中 如果 int a=3, int b=4 ; 为什么 不执行case 0语句 而是直接执行 case 1 语句case1 :prinf ("!");break; 写错了一点
2026年09月24日 16:11
有2个网友回答
网友(1):

如果你的a确实大于0,那么你的switch就相当于是switch(1),永远都只会执行case 1。
如果a<=0,那么switch就相当于是switch(0),永远都只会执行case 0。
对于switch(b>0)同理可得

你的程序分析:
因为a等于3,所以a>0成立,所以switch(a>0)即为switch(1),执行外层的case 1。然后switch(b>0)也是相当于switch(1),再执行内层的case 1

网友(2):

因为a=3>0所以返回1,所以先执行第一个case1,又因为b=4>0所以也返回1表示真,所以执行第二个case1,这样说明白吗,比较运算符表示假返回0,表示真返回非零