首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言switch的有关问题

2012-11-10 
C语言switch的问题今天给学妹讲C,忽然看到她课本上的代码,但是小弟不才,switch里面的表达式和这个程序的运

C语言switch的问题
今天给学妹讲C,忽然看到她课本上的代码,但是小弟不才,switch里面的表达式和这个程序的运行过程实在是不理解,求高手帮忙,以下是代码

C/C++ code
#include<stdio.h>void 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;                    default:printf("#");                }        default:printf("$");    }    printf("\n");}


[解决办法]
break的作用域是跳出当前的for,while,switch,开始a>0,所以跳到case1,然后b<0没这种情况,就是默认的default了,顺序执行到case 0,然后c==5,执行case 1,输出#,跳出当前switch结构,然后执行default,就输出了$
[解决办法]
通常case很少像你这样用的,switch对应的是case数字,还有case里面尽量不要这样混乱,而且不能定义数据,通常都是调用函数,还有注意break;的使用。
你要对条件表达式返回的值有所了解,b<0只会返回1或0
[解决办法]
1.switch()里面的是返回值,比如这个题里switch(a>0)返回1 
2.第一步:switch(a>0) 为真,返回1,执行case 1:switch(b<0)语句
第二步:switch(b<0) 为假,返回0,没有case 0,所以什么也不执行,但是由于在switch(b<0)没有 break语句,所以会继续执行case 0:switch(c==5)语句。
第三步:执行case 0:switch(c==5) 为真,返回1,所以跳过了case 0:printf("*");break;
接着打印一个"#",然后执行break语句,跳出了switch(c==5),但是switch(c==5)语句后面没有break语句,所以会继续执行default:printf("$");语句,输出"$"。

我觉得楼主主要是1.没分清switch()括号里是返回返回值的意思。2.没看清break语句

热点排行