读到 C++ 中的新行进入无限循环

Reading till new line in C++ goes in an infinite loop

给定以下程序

#include <iostream>
#include <string>
using namespace std;

int main() {
    int integer;
    cin >> integer;
    if (!cin) {
        string str;
        char ch;
        while ((ch = cin.get()) != '\n') {
            cout << "scanning" << endl;
            cout << "got " << static_cast<int>(ch) << endl;
        }
    }
    return 0;
}

当给定此输入文件(重定向输入)时

x123

最后换行,为什么程序会进入死循环?遇到文件末尾的换行符不应该停止吗?我不断获取 ch 的值作为 -1..

谢谢!

注意 cin.ignore()似乎不​​能帮助解决这里的问题

如果您在 std::cin 上遇到错误(属于 std::istream 类型),那么您需要清除它:

int integer;
cin >> integer;
if (!cin) {
    cin.clear(); // If an error occurred, we need to clear it!
    ...

然后will work.

解决方案是使用 cin.clear() 从失败状态中恢复,然后重试扫描直到换行..