来自无效输入的std :: cin无限循环

Dannyu NDos

请阅读以下代码:

#include <iostream>
#include <cstdlib>
int main() {
    std::cout << "Please input one integer." << std::endl;
    int i;
    while (true) {
        std::cin >> i;
        if (std::cin) {
            std::cout << "i = " << i << std::endl;
            break;
        } else {
            std::cout << "Error. Please try again."<< std::endl;
            std::cin.ignore();
            std::cin.clear();
        }
    }
    std::cout << "Thank you very much." << std::endl;
    std::system("pause");
    return 0;
}

当我给std :: cin无效的输入(例如)时w,则将Error. Please try again.无限输出。我以为std::cin.ignore会清空输入流,std::cin.clear并将其恢复到正常状态。那么为什么会发生无限循环呢?

叶赫兹克尔B.

默认情况下,std::basic_istream::ignore()仅忽略1个字符:

basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

(来自http://en.cppreference.com/w/cpp/io/basic_istream/ignore

对于您的案例,更多惯用语似乎是该示例中的一种:

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

另外,请注意,您要在调用clear()之前ignore()调用,因此输入提取ignore()将成功执行,而不是立即返回。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std::cin 导致无限循环

来自分类Dev

std :: cin无限循环输入错误

来自分类Dev

(C ++)不会在std :: cin上停止并进入无限循环吗?

来自分类Dev

(C ++)不会在std :: cin上停止并进入无限循环吗?

来自分类Dev

无效的int输入陷入无限循环

来自分类Dev

使用std :: cin输入停止while循环

来自分类Dev

为什么会收到输入无效无限循环?

来自分类Dev

C:输入中的无限循环

来自分类Dev

无限循环,不接受输入

来自分类Dev

输入字符时无限循环

来自分类Dev

无限循环,不接受输入

来自分类Dev

使用cin.fail()时的无限循环

来自分类Dev

无效的密码导致无限的显示循环

来自分类Dev

输入退出条件后陷入无限循环。

来自分类Dev

停止并恢复按键输入上的无限循环

来自分类Dev

当输入不是数字时,进入无限循环

来自分类Dev

C ++:输入验证带来的无限循环

来自分类Dev

对于大输入,循环无限运行

来自分类Dev

输入在C程序中进入无限循环

来自分类Dev

为某些输入获取无限循环

来自分类Dev

输入错误时程序进入无限循环

来自分类Dev

验证用户输入时无限循环

来自分类Dev

在 c 中的无限循环中获取输入

来自分类Dev

使用std :: ofstream C ++的无限while循环

来自分类Dev

std :: cin有时会挂起,有时在无效输入后会永远重复

来自分类Dev

从文件加载时,cin.get导致无限循环

来自分类Dev

在读取非数值时的cin无限循环

来自分类Dev

我可以循环直到 `std::cin` 在输入缓冲区中看到 `\n` 字符吗?

来自分类Dev

在while循环中如何评估“ std :: cin >> value”?