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

checking cin input, clearing input buffer

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

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

将导致 "asked!" 在第一个无效输入(为 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() 来清除流的错误状态,否则所有未来的 cin 操作都将 exit/fail。也可以更直接的测试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);

以下有效:

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

    }

} while (true);

感谢托尼 D