某通信公司switch笔试题int ncswitch(n++){default:printf(error)breakcase a:caseA:case b
某通信公司switch笔试题 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运行(已运行过)[最优解释] 弱弱的问一句,不用执行default后面的printf("error");的吗[其他解释] 是passwarn,因为你后面没有了break; 另外,你的n初始为 'c' 当然执行一次后,n为'd'了,但这不影响结果! 毕竟,根据switch的特性,在【开始端直到完全结束或break结束】[其他解释] 输出结果是passwarn 因为你的case后面没有加break,所以程序会顺序执行后面的语句[其他解释] 这里就是passwarm,n的值传进来时是c,下面case又没有break语句,所以会输出下面的[其他解释] passwarn 在linux下编译执行 原因 case ‘c'后没有 break; case ’d'继续执行[其他解释] "c" : 之后的顺序执行一次 passwarn[其他解释]
引用: 答案这个,请大家不要说两个warn了,继续坐等大牛解释 其实很多人不是已经回答了么 ...
首先:你要考虑顺序执行,所以第一个default被直接滤过去了
其次:你要考虑n的初始值,所以从'c'开始查找输出,所以输出pass
最后:你要注意有没有break,没有?那么继续输出后面的,所以输出warn
------
你做个试验,在case 'c':case 'C':printf("pass");这一句后面简单的加一句printf("\n");
你会看到,结果变成:
pass
warn
而不是passwarn,这样做,你就能体会什么叫顺序执行 ...
[其他解释] 不过就是case语句的fall down而已.
[其他解释] passwarnwarn
[其他解释] 引用: passwarnwarn 一个冒号只算一个
[其他解释] passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束
[其他解释] 好像 挺简单的
[其他解释] passdwarn
[其他解释] 怎么我觉得是warn的...
不是switch(n++)吗?
[其他解释] 引用: 怎么我觉得是warn的... 不是switch(n++)吗? 先取n的值 再++
[其他解释] 为什么会有人居然会觉得是2次warn
[其他解释] 引用: 怎么我觉得是warn的... 不是switch(n++)吗? 如果是++n 就按你说的了
ps:到底结果是passwarn还是passwarnwarn
我觉得是前者
[其他解释] 引用: 怎么我觉得是warn的... 不是switch(n++)吗? 是n++,是先执行n,然后在++
[其他解释] 正确答案应该是passwarn,按switchcase的规则是这样。
可是这个default我受教了!default在前面和后面的结果也不一样,以前没注意过。。。
------其他解决方案--------------------
引用: passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束 你有一个错误,你没有考虑顺序执行。
[其他解释] 这个需要什么解释
[其他解释] 答案这个,请大家不要说两个warn了,继续坐等大牛解释
[其他解释] 又没有循环 直接一次性输出 就考了个n++ 和switch
[其他解释] 引用: 引用:passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束 你有一个错误,你没有考虑顺序执行。 确实多了一个warn,看到前面的顺手粘贴 复制了一下,分析应该是没错的。
[其他解释] 可是case‘C’的值不符合switch括号里的值
[其他解释] 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");
}
这个程序执行case 'c':case 'C':printf("pass");
那case‘c’执行然后case‘C’执行吗?
[其他解释] 看汇编代码.
[其他解释] 我怎么觉得也是warn啊
看看这个程序
#include <stdio.h> int main(void) { int i=1; while(i++<10) { printf("%d,",i); } return 0; } 输出的就是2到10啊,这里也不输出1的
不应该是判断之后就是加1然后进入循环体吗?
[其他解释] 引用: 引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { printf("%d,",i); } return 0;} 输出的就是2到10啊…… 这个我知道啊,入口的时候n不是加1了吗
进入之后难道不是变成100吗?为什么还要执行99的时候的语句呢?
我设置成整型数之后结果就不是这样了
[其他解释] 引用: 我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { printf("%d,",i); } return 0;} 输出的就是2到10啊,这里也不输出1的 不应该是判断之后就是加1…… 楼主的程序没有循环 第一眼有时会看错
[其他解释] 该回复于2012-11-19 14:02:49被管理员删除
[其他解释] 我怎么觉得也是warn啊
看看这个程序
C/C++ code?
12345678910
#include <stdio.h> int main(void) { int i=1; while(i++<10) { printf("%d,",i); } return 0; }
输出的就是2到10啊,这里也不输出1的……[/quote]
i++,1<10,之后i+1=2了。所以输出是2吧!
------其他解决方案--------------------
引用: 引用:引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { printf("%d,",i); } …… switch(i++)
这个句子条件的时候输入进switch这个语句的是i,也就是case的i.
然后i才++.
而你举的例子,
for(i++)
printf(i);
这时候printf的i已经是++后的i了.
[其他解释] 新手巩固了~~
[其他解释] 没有break,要直接往后运行
[其他解释] 当然是一个warn啊,你的这句
case 'c':case 'C':printf("pass");
后面没有加break,所以就是一个warn啦。
[其他解释] 引用: passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束 http://www.hollistercanadacoupons.com 别误导人啊..就一个warn
[其他解释] 引用: 引用:passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束 http://www.hollistercanadacoupons.com 别误导人啊..就一个warn 额,我这句话也误导人了.Passwarn.一个warn.
[其他解释] 引用: 引用: 引用:passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束 http://www.hollistercanadacoupons.com 别误导人啊..就一个warn 额,我这句话也误导人了.Passwarn.一个…… 呵呵呵 ...
[其他解释] 引用: 引用:引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { printf("%d,",i); } …… 先取值 在switch结束后 再+1
[其他解释] 引用: 答案这个,请大家不要说两个warn了,继续坐等大牛解释 你上面的几位都解释的这么清楚了,还解释啥呢,真好笑
[其他解释] 这种坑爹的代码工作中谁写谁倒霉
[其他解释] passwarn大家都说了
[其他解释] 答案就是passwarn;没有任何别的异议?
case 1:case 2: case 3: case 4: print("a");
j就是说switch接受到的1234中的任何一个,都会打印出a?
是这样吗?
[其他解释] 是passwarn,
[其他解释] 引用: 引用:引用:引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { …… 懂了
------其他解决方案--------------------
引用: 答案这个,请大家不要说两个warn了,继续坐等大牛解释 这个要解释啥。。
[其他解释] 引用: 引用:引用:引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { …… 如果是吧printf换成一个计算式的话,比如就是一个加法吧k=i;这时候k是等于i还是加了1之后的?
[其他解释] 引用: 引用:引用:引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { …… 那如果for里面不是输出的话,就是一个简单的运算表达式的话,那也是先用i然后再加1吗?
不过好像不是吧?
[其他解释] 这是C语言的多做之过(参见c专家编程),switch的fall through原则,关键是break。
一方面是没有break导致的顺序执行,另外就是没有default,会导致空指针之类的问题
[其他解释] 引用: 引用:答案就是passwarn;没有任何别的异议? case 1:case 2: case 3: case 4: print("a"); j就是说switch接受到的1234中的任何一个,都会打印出a? 是这样吗? 对的。注意在后边加break,如果没有break,会顺序执行后边的case。 那上面那个题目并不难啦
[其他解释] 引用: 答案就是passwarn;没有任何别的异议? case 1:case 2: case 3: case 4: print("a"); j就是说switch接受到的1234中的任何一个,都会打印出a? 是这样吗? 对的。注意在后边加break,如果没有break,会顺序执行后边的case。
[其他解释] 在VS里看了看,
switch(n) 和 switch(n++),结果是一样的,都是 passwarn, switch(n) 之后n是c,switch(n++)之后n是d。
switch(++n)的结果是warn,n是d,因为先++了。
[其他解释] 引用: passdwarn 正确答案,首先第一这个是switch,不是while,我第一次看错了,所以只会执行一次,n++其实还是‘c’,故执行case 'c':;因为后面没有break,所以继续执行case 'd':;因此打印出来passwarn
[其他解释] 引用: 输出结果是passwarn 因为你的case后面没有加break,所以程序会顺序执行后面的语句 ++
[其他解释] 引用: 弱弱的问一句,不用执行default后面的printf("error");的吗 我以前也曾有过这样的疑问,后来实验发现default 是否执行 和放的地方没有关系
[其他解释] passwarn
switch,csae语句没有循环,只会运行一次。因为定义的是n='c',而n++是先运行在++.即进入switch语句的仍是c。故走case'c':输出pass,因没有break,仍会继续走case‘d’:即输出warn。然后就是程序结束啦。
[其他解释] 引用: 请问你截图的书叫什么名字?
[其他解释] 这语句写的真蛋疼啊,格式排好点,一目了然
[其他解释] passwarnbogon ------其他解决方案--------------------
应该是pass wam 但 n的值是d
因为是n++ 程序运行一遍了 n的值才自加
[其他解释] 引用: 引用: 请问你截图的书叫什么名字? c专家编程
[其他解释] 输出结果为passwarn。
首先,n++是取n的值作为表达式的值,然后n自增1;而++n是n自增1,然后作为表达式的值。那么传递个switch的就是'c'。
其次,case 'c'和case'C'的执行语句之后没有break,那么程序会继续向下执行,直到switch结束。
[其他解释] passwarn 因为case都没有break语句
[其他解释] 引用: 引用:引用:引用:我怎么觉得也是warn啊 看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){ int i=1; while(i++<10) { …… 正解啊
[其他解释] 引用: 引用:怎么我觉得是warn的... 不是switch(n++)吗? 如果是++n 就按你说的了 ps:到底结果是passwarn还是passwarnwarn 我觉得是前者 前者
[其他解释] null