一段时间内的 CIN 循环未按预期工作 [复制]

cin in a while loop not working as expected [duplicate]

提问人:David.S 提问时间:1/4/2023 更新时间:1/4/2023 访问量:186

问:

我是一个新的 cpp 学习者,目前正在尝试 std iostream 库。我正在开发一个程序,该程序将数字作为输入并输出数字,并在输入 0 时退出。我还希望程序可以忽略无效输入,在遇到无效输入时输出错误消息并继续读取数字,直到我输入 0 退出。下面是我写的代码:

while (true) {
        cout << "Please input value" << endl;
        cin >> value;
        if (cin.fail()) {
            cerr << "Invalid input" << endl;
        } else if (value == 0) {
            cout << "Exit with 0";
            break;
        } else {
            cout << "You have entered " << value << endl;
        }
    }

代码没有像我预期的那样工作。当我输入正常数字并且效果很好时,输出每个数字,直到我输入 0:

Please input value
1
You have entered 1
Please input value
2
You have entered 2
Please input value
0
Exit with 0

但是,当我输入的内容不是数字时,则在下一个 while 循环中不起作用并重复输出错误消息:cin

Please input value
a
Invalid input
Please input value
Invalid input
Please input value
Invalid input
Please input value
Invalid input
Please input value
more lines

我假设当一个 cin 失败时,它不会在下一个循环中读取另一个数字。我想知道我怎样才能“重新激活”cin 以使其读取数字,即使它以前失败了。

任何帮助都是值得赞赏的。

C++ 标准 IOSTREAM

评论

2赞 Retired Ninja 1/4/2023
发生错误后,您需要添加以清除错误标志。您还需要清除无效输入,否则它将再次出错。cin.clear()cin.ignore(...)

答: 暂无答案