首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >while语句中的无限循环

while语句中的无限循环
EN

Stack Overflow用户
提问于 2012-01-11 02:03:57
回答 5查看 497关注 0票数 2

下面是我的代码中的一段代码

代码语言:javascript
复制
scanf("%d", &s);

while(s!=1 && s!=2) {
    if(scanf("%d", &s) != 1) {
        show_warning(); //just print some info msg
    }
}

其思想是,只有当用户输入1,2以外的值并且输入值仅为整数时,才执行show_warning函数。有了上面的代码,它在无限循环中跳跃。如何解决这个问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-11 02:14:57

问题是失败的输入操作不会从流中提取任何字符(并且您将一遍又一遍地读取无效输入),因此您必须手动清空输入。例如:

代码语言:javascript
复制
char buf[1000];

// ...

if(scanf("%d", &s) != 1)
{
    puts("Error, try again: ");
    fgets(buf, 1000, stdin);
}

正如我在other question中所建议的,如果您从一开始就使用fgets始终读取一行,并在以后处理它,那么您就可以克服这个问题。

(同样的原理也适用于C++:首先读取整行,以便输入流可以继续,然后再处理该行,看看它是否有效。)

票数 5
EN

Stack Overflow用户

发布于 2012-01-11 02:06:36

为什么要使用while循环?您希望show_warning();被调用一次,还是重复调用?如果你回答了一次,那么你只需要一个If语句。

票数 0
EN

Stack Overflow用户

发布于 2012-01-11 02:06:39

另外,当没有scanf成功时会发生什么?变量s保持不变(如果您没有对其进行初始化,则可能具有未定义的值)。您应该设置它,或者更改while的条件!

而且你真的应该学会在编译时启用警告和调试信息(例如Linux上的gcc -Wall -g )和使用调试器(例如Linux上的gdb )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8808145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档