标题:死循环问题
取消只看楼主
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
结帖率:100%
已结贴  问题点数:10 回复次数:3 
死循环问题
main()
{
    int number;
    printf("choose a number from 1,2,3:");
    scanf("%d",&number);
    while(number!=1&&number!=2&&number!=3)
    {
        printf("input error, pls input again");
        scanf("%d",&number);
    }
 }

程序是为了实现输入1.2.3其中的一个数字,如果输入其他字符则要求重新输入。

运行结果:

1、当输入1、2、3时正常。
2、当输入7、8、9时也能正常提示input error, pls input again,并能再次输入
3、当输入字母时(比如u),则陷入死循环,一直输出input error, pls input again
搜索更多相关主题的帖子: 字母 number 
2010-06-05 17:52
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
得分:0 
以下是引用gaoce227在2010-6-5 18:00:28的发言:

1.为什么会进入死循环?
2.在while语句前加入if判断行吗?有点繁琐了。
1、我问的就是为什么陷入死循环,输入7、9等数字为什么不陷入死循环?

2、这跟加IF没有关系。就算是加个判断有何用?如果我不用WHILE那么如果一直输入错误,我怎么提示重新输入?


不太明白你的意思,你写个代码,我试试呵呵

[ 本帖最后由 kettle99 于 2010-6-5 18:52 编辑 ]
2010-06-05 18:49
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
得分:0 
以下是引用gaoce227在2010-6-5 19:15:28的发言:

https://bbs.bccn.net/thread-304769-1-1.html

你看看这个题,和你的有关系吗?

至于这个死循环,这样解释行不?
scanf是从你的输入缓存里面取东西。
1.缓存里面没有东西,命令行阻塞,你输入直到回车,输入的东西都放到缓存里面;
2.然后scanf才去缓存里面取东西,做类型转换;
3.如果scanf失败了,在很多实现下,缓存的内容仍然在那里,你下一次scanf调用的时候,因为有东西,所有并不需要读取命令行输入,而是从已经有的缓存里面去取,所以就陷入了不需要输入的scanf不停读取->失败->读取。
看那个帖子了,跟我的问题一样,那个帖子问题没解决

不过你解释的不错,能讲得通

但是为什么输入7的时候缓存会清,而输入u时缓存里一直有东西啊?

[ 本帖最后由 kettle99 于 2010-6-5 19:37 编辑 ]
2010-06-05 19:35
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
得分:0 
以下是引用wibx化吉在2010-6-5 19:32:38的发言:

你定义的number是整型
输入字符应该就会出错吧
我也不太懂,看看这个,可以的
#include
main()
{
    int number;
    scanf("%d",&number);
    while(number<1||number>3)                             
    {
         printf("input error, pls input again\n");
         getchar();  //加个这个就可以了吧
         scanf("%d",&number);
     }
}
谢谢你

我是想知道为什么出这种情况
2010-06-05 19:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-309315-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.117062 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved