某通信公司switch笔试题

haoruifly1 2012-11-18 02:29:45
int n='c';
switch(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");

}
这个运行结果是,请给出原因,不要告诉我用VS运行(已运行过)
...全文
1310 67 打赏 收藏 转发到动态 举报
写回复
用AI写文章
67 条回复
切换为时间正序
请发表友善的回复…
发表回复
tingfengx 2012-11-23
  • 打赏
  • 举报
回复
引用 12 楼 heywanglei 的回复:
引用 9 楼 l_ypei 的回复:怎么我觉得是warn的... 不是switch(n++)吗? 如果是++n 就按你说的了 ps:到底结果是passwarn还是passwarnwarn 我觉得是前者
前者
风在天边 2012-11-23
  • 打赏
  • 举报
回复
引用 32 楼 zhkza99c 的回复:
引用 28 楼 xuchao1229 的回复:引用 27 楼 zhuankeshumo 的回复:引用 25 楼 xuchao1229 的回复:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { ……
正解啊
scboy2012 2012-11-23
  • 打赏
  • 举报
回复
应该是pass wam 但 n的值是d 因为是n++ 程序运行一遍了 n的值才自加
AndyZhang 2012-11-22
  • 打赏
  • 举报
回复
引用 60 楼 nickwu1220 的回复:
引用 52 楼 zhang20072844 的回复: 请问你截图的书叫什么名字?
c专家编程
crazy1003 2012-11-21
  • 打赏
  • 举报
回复
在VS里看了看, switch(n) 和 switch(n++),结果是一样的,都是 passwarn, switch(n) 之后n是c,switch(n++)之后n是d。 switch(++n)的结果是warn,n是d,因为先++了。
VermillionTear 2012-11-21
  • 打赏
  • 举报
回复
输出结果为passwarn。 首先,n++是取n的值作为表达式的值,然后n自增1;而++n是n自增1,然后作为表达式的值。那么传递个switch的就是'c'。 其次,case 'c'和case'C'的执行语句之后没有break,那么程序会继续向下执行,直到switch结束。
  • 打赏
  • 举报
回复
passwarn 因为case都没有break语句
良先生vip 2012-11-21
  • 打赏
  • 举报
回复
passwarn switch,csae语句没有循环,只会运行一次。因为定义的是n='c',而n++是先运行在++.即进入switch语句的仍是c。故走case'c':输出pass,因没有break,仍会继续走case‘d’:即输出warn。然后就是程序结束啦。
nickwu1220 2012-11-21
  • 打赏
  • 举报
回复
引用 52 楼 zhang20072844 的回复:
请问你截图的书叫什么名字?
JianDom 2012-11-21
  • 打赏
  • 举报
回复
这语句写的真蛋疼啊,格式排好点,一目了然
风中追梦郎 2012-11-21
  • 打赏
  • 举报
回复
passwarnbogon
「已注销」 2012-11-20
  • 打赏
  • 举报
回复
引用 32 楼 zhkza99c 的回复:
引用 28 楼 xuchao1229 的回复:引用 27 楼 zhuankeshumo 的回复:引用 25 楼 xuchao1229 的回复:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { ……
懂了
yang7531388 2012-11-20
  • 打赏
  • 举报
回复
引用 8 楼 loveheronly 的回复:
passdwarn
正确答案,首先第一这个是switch,不是while,我第一次看错了,所以只会执行一次,n++其实还是‘c’,故执行case 'c':;因为后面没有break,所以继续执行case 'd':;因此打印出来passwarn
AnYidan 2012-11-20
  • 打赏
  • 举报
回复
引用 1 楼 anhuizhuanjiao 的回复:
输出结果是passwarn 因为你的case后面没有加break,所以程序会顺序执行后面的语句
++
_阿杜_ 2012-11-20
  • 打赏
  • 举报
回复
引用 53 楼 wenlian4588 的回复:
弱弱的问一句,不用执行default后面的printf("error");的吗
我以前也曾有过这样的疑问,后来实验发现default 是否执行 和放的地方没有关系
wenlian 2012-11-20
  • 打赏
  • 举报
回复
弱弱的问一句,不用执行default后面的printf("error");的吗
AndyZhang 2012-11-20
  • 打赏
  • 举报
回复
AndyZhang 2012-11-20
  • 打赏
  • 举报
回复
这是C语言的多做之过(参见c专家编程),switch的fall through原则,关键是break。 一方面是没有break导致的顺序执行,另外就是没有default,会导致空指针之类的问题
caofa0532 2012-11-20
  • 打赏
  • 举报
回复
引用 49 楼 gaochizhen33 的回复:
引用 41 楼 caofa0532 的回复:答案就是passwarn;没有任何别的异议? case 1:case 2: case 3: case 4: print("a"); j就是说switch接受到的1234中的任何一个,都会打印出a? 是这样吗? 对的。注意在后边加break,如果没有break,会顺序执行后边的case。
那上面那个题目并不难啦
gaochizhen33 2012-11-20
  • 打赏
  • 举报
回复
引用 41 楼 caofa0532 的回复:
答案就是passwarn;没有任何别的异议? case 1:case 2: case 3: case 4: print("a"); j就是说switch接受到的1234中的任何一个,都会打印出a? 是这样吗?
对的。注意在后边加break,如果没有break,会顺序执行后边的case。
加载更多回复(46)

69,371

社区成员

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

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