c++ - 检查 cin 输入,清除输入缓冲区

标签 c++ buffer cin typechecking

C++ 新手 - 尝试检查输入格式。什么都试过了,束手无策。任何帮助,将不胜感激。我已经将我的问题分解为这个基本案例:

while(1) {
    cin >> x;
    cout << "asked!" << endl;
    cin.ignore(1000, 'n');
}

会导致无限循环的“问!”在第一个无效输入之后(输入 not int for x)。我想处理不正确的输入。以下将不起作用:

do {
    cin.clear();
    cin >> x >> y;
    if (cin.fail()) 
    {
        cout << "Invalid input." << endl;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }

} while (cin.fail());

最佳答案

您应该在 std::cin.ignore() 之前立即使用 std::cin.clear() 来清除流的错误状态,否则所有 future 的 cin 操作将退出/失败。也可以更直接的测试std::cin操作是否成功...

do {
    if (std::cin >> x >> y) break;
    std::cout << "Invalid input, please try again...\n";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (true);

关于c++ - 检查 cin 输入,清除输入缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533483/

相关文章:

c++ - std::ifstream::read() 读取少于请求并无明显原因设置 failbit

c++ - string.length() 在第一个单词后停止

c++ - Cin 在 for 循环中使用后被跳过

C++ for 循环 - 测试部分

c++ - C++ 中的 Unicode 程序需要哪些步骤

c++ - 如何检查插入剪贴板的数据是否来自PrintScreen?

c++ - 通过运行应用程序以编程方式确定正在使用的共享库

c++ - 为什么会出现缓冲区溢出?我怎样才能避免它? [C++]

node.js - 如何手动复制 Node.js 缓冲区?

c++ - cin 和 getline 跳过输入