主持人龙凯微博:关于C语言的一个题目

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/25 16:43:07
22.有以下程序
main(){
char k; int I;
for(i=1;i<3;i++){
scanf("%c",&k);
switch(k){
case '0': printf("another\n");
case '1': printf("number\n");
}
}
}
程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是
A) another number
B) another number
C) another number another
D) number number number
请问这个题目怎么做,答案是不是有误!

-------------------------------------------
我将程序改了一下:
-------------------------------------------
#include <stdio.h>
main(){
char k; int i;
for(i=1;i<3;i++){
scanf("%c",&k);
switch(k){
case '0': printf("another---k=[%d]\n",k);
case '1': printf("number---k=[%d]\n",k);
}
}
}

-------------------------------------------
运行结果为:
-------------------------------------------

01

another---k=[48]
number---k=[48]
number---k=[49]
------------------------------------------------

其中48就是'0'ASCII码对应的数值
49就是'1'对应的ASCII码值

因为接收输入的是字符型变量
所输入的东西是存放在输入BUF中
接收时一次取一个字符
所以
第二次循环的时候在输入BUF中还有一个'1'
则k第二次就直接取走了,不需要输入。

4个答案的确都是错的,正确的应该是
another
number
number

第一个循环由于k是'0'所以输出第一行和第二行,第二个循环K是'1',所以输出第3行,第三个循环k是ascii码13,所以不符合所有case,没有输出

-----------------------------------
果然是我说错了,谢谢wincss兄提醒,我没有细看程序,实际上只有2次循环,i只会递增到2呵呵.不过就算i递增到3我的分析也是不对的,scanf不会接受ascii(13)这个字符.答案还是上面的答案呵呵.
至于whiv的问题,关键在于他是使用%c来接受,这样scanf会在输入缓冲区内每次接纳1个字符给K,如果缓冲区内字符不够,那么他会调用PAUSE中断,并等待键盘输入,如果是使用%s来接受,那么就会把缓冲区内所有字符接下来了.

这样的写法两条case语句不会重复执行
因为case'0'成立case'1'就不会成立
每次只有一句执行

至于答案我也没试过
是不是会溢出k是char类型的
而你输入的是01<回车>
(我不是很懂c语言)

很明显,没有正确答案,看/n就知道了
another
number
number

loader_cn不是很懂C语言就不要回答了
C语言的case就是会连续执行下去!!
鬼火狼烟也是错误的,实际不会读入回车符,而且只执行两次循环!!!i=1;i<3;i++,只执行i=1;i=2没有i=3
没有一个答案是正确的。

结果就是
another
number
number

运行结果确如鬼火狼烟所说。
loader_cn确实不懂C语言,他的答案在其他编程语言是对的,但在C就不是这样了。
如果你的题目没抄错的话,那就是答案错了。
另外我也有个疑问,为什么C语言在循环中的输入是一次性的输入而不是分批呢?希望有人能回答