QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 672|回复: 4

c 语言中遇到的问题,请高手指点

[复制链接]
发表于 2004-3-4 09:56:12 | 显示全部楼层 |阅读模式
现在有以下一段代码,看起来似乎没有错误,可是编译之后,执行while循环的时候如果输入数字,可以正确执行,当输入非数字字符给a的时候,就不断的执行循环语句, 输出两个printf语句的值,执行scanf语句的时候也不等待用户输入。为何如此,请各路高手指点一下。
       int a=1000;
   
         do{
                  printf("请输入一个数字:");
                  scanf("%d",&a);
                  perror ("errnn:");
            if(a==1000)
                              printf("您输入的非数字,请重新输入一次!");
         }while(a==1000);
发表于 2004-3-4 11:11:33 | 显示全部楼层
scanf 出问题吧

帮助这样说的:
Scanning stops when an input character does not match such a format character. Scanning also stops when an input conversion cannot be made.

当输入一个字符时,
scanf("%d", a)发现当前的不为一个数字,它就不处理,直接到下一个语句,但刚才输入的字符还在"stdin stream"中,并没有清空.所以循环到下一次scanf时,它发现"stdin stream"里还有东西,所以他没有停下来等待用户输入又继续搞下去......这样就死循环了.

解决办法,当输入为非数字时,清空"stdin stream"就可以了.
回复

使用道具 举报

 楼主| 发表于 2004-3-4 12:10:41 | 显示全部楼层
原来是这样啊,明白了,谢谢gye朋友。
回复

使用道具 举报

发表于 2004-3-4 14:13:08 | 显示全部楼层
那在scanf后面带个fflush就可以解决了……
回复

使用道具 举报

 楼主| 发表于 2004-3-4 21:08:55 | 显示全部楼层
我知道了,谢谢楼上的朋友。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 20:42 , Processed in 0.047141 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表