C语言switch的问题

bianHao-binn 2012-10-20 06:45:14
今天给学妹讲C,忽然看到她课本上的代码,但是小弟不才,switch里面的表达式和这个程序的运行过程实在是不理解,求高手帮忙,以下是代码

#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");
}
...全文
268 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bianHao-binn 2012-10-20
  • 打赏
  • 举报
回复
恩恩,谢谢了,主要是以前用switch没在里面写过表达式,所以一看有点蒙,
pw2156314 2012-10-20
  • 打赏
  • 举报
回复
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语句
是小叶呀~ 2012-10-20
  • 打赏
  • 举报
回复
通常case很少像你这样用的,switch对应的是case数字,还有case里面尽量不要这样混乱,而且不能定义数据,通常都是调用函数,还有注意break;的使用。
你要对条件表达式返回的值有所了解,b<0只会返回1或0
bianHao-binn 2012-10-20
  • 打赏
  • 举报
回复
我也想啊,但是不是我的课本
iamnobody 2012-10-20
  • 打赏
  • 举报
回复
这课本扔了吧. SB代码.
bianHao-binn 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

break的作用域是跳出当前的for,while,switch,开始a>0,所以跳到case1,然后b<0没这种情况,就是默认的default了,顺序执行到case 0,然后c==5,执行case 1,输出#,跳出当前switch结构,然后执行default,就输出了$
[/Quote]
哦哦,这样啊,switch(a > 0)这样写,是不是case对应的值就只有0或者是1了?
guochanoo7 2012-10-20
  • 打赏
  • 举报
回复
break的作用域是跳出当前的for,while,switch,开始a>0,所以跳到case1,然后b<0没这种情况,就是默认的default了,顺序执行到case 0,然后c==5,执行case 1,输出#,跳出当前switch结构,然后执行default,就输出了$

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧