免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5166 | 回复: 10
打印 上一主题 下一主题

在for循环中,奇怪的scanf()问题,大家来看一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-19 15:21 |只看该作者 |倒序浏览
这是我的源程序。
程序很简单,通过对test值的判断,当test值为'n'时,跳出循环,程序退出;
                                当test的值为非'n'时,输出"Do this!"循环3次。
但运行结果却很让人奇怪……

  1 #include <stdio.h>
&nbsp;&nbsp;2
&nbsp;&nbsp;3 int main(void){
&nbsp;&nbsp;4     int hcount=0;
&nbsp;&nbsp;5     char test='\0';
&nbsp;&nbsp;6
&nbsp;&nbsp;7     for(hcount=0; hcount<3; hcount++)
&nbsp;&nbsp;8     {
&nbsp;&nbsp;9         printf("\nDo you want to enter details of a%s horse (Y or N) ? ",
&nbsp;10                                                         hcount? "nother": "");
&nbsp;11         scanf("%c",&test);
&nbsp;12         if(test == 'n')
&nbsp;13             break;
&nbsp;14         printf("\n\nDo this !\n");
&nbsp;15     }
&nbsp;16     return 0;
&nbsp;17 }
&nbsp;18


以下是运行结果:
flo@linux-icyw:~/bin/c> gcc -Wall -g test.c -o test
flo@linux-icyw:~/bin/c> ./test

Do you want to enter details of a horse (Y or N) ? y


Do this !

Do you want to enter details of another horse (Y or N) ?

Do this !

Do you want to enter details of another horse (Y or N) ? y


Do this !


注意绿色的一行!!!她并没有询问我的输入,自己竟然主观的判断了test的取值非'n'。…………

我用gdb调试时,在第二次循环(如果有的话)中,test被自动赋值为'\n'!这应该就是在运行结果中,出现绿色一行的原因。

请大家解释下,为什么test会在第二次循环中被自动赋值为'\n'呢???

论坛徽章:
0
2 [报告]
发表于 2007-10-19 15:24 |只看该作者
请各位高手帮忙解释一下!

论坛徽章:
0
3 [报告]
发表于 2007-10-19 15:54 |只看该作者
回车键……

论坛徽章:
0
4 [报告]
发表于 2007-10-19 15:56 |只看该作者
高手帮忙解释下吧,确实很迷惑

    高手帮忙解释下吧,确实很迷惑

        高手帮忙解释下吧,确实很迷惑



还有没有人也遇见过这种问题的?

论坛徽章:
0
5 [报告]
发表于 2007-10-19 16:00 |只看该作者

回复 #3 放驴娃 的帖子

可我并没有让test保存回车键阿?
朋友能不能说的详细一点  谢谢

论坛徽章:
0
6 [报告]
发表于 2007-10-19 16:25 |只看该作者
俄滴神啊  谁来发表下意见  解决了它吧

论坛徽章:
0
7 [报告]
发表于 2007-10-19 16:33 |只看该作者
scanf前flush一下stdin(why?自己想一下 :)),scanf的返回值是有用的。
man scanf瞅瞅

论坛徽章:
0
8 [报告]
发表于 2007-10-19 16:48 |只看该作者

回复 #7 alickguo 的帖子

我查一下  谢谢你的提议  

论坛徽章:
0
9 [报告]
发表于 2007-10-19 16:52 |只看该作者
whilc(getchar()!='\n')
             ;

论坛徽章:
0
10 [报告]
发表于 2007-10-19 16:54 |只看该作者
因为回车也是字符吧,会自动连续读取的!
可以对回车字符进行判断
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP