检查cin输入,清除输入缓冲区

时间:2015-02-16 01:56:19

标签: c++ buffer cin typechecking

c ++新手 - 尝试检查输入格式。已经尝试了一切,最终。任何帮助,将不胜感激。我已将问题分解为这个基本案例:

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

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

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

} while (cin.fail());

2 个答案:

答案 0 :(得分:1)

您应该在std::cin.clear()之前使用std::cin.ignore()清除流的错误状态,否则将来所有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);

答案 1 :(得分:0)

以下工作:

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

    }

} while (true);

感谢Tony D