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

时间:2016-09-13 23:32:35

标签: c++ c++11 cin

鉴于以下计划

#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()似乎没有帮助解决此问题

2 个答案:

答案 0 :(得分:3)

如果您在std::cinstd::istream类型)上收到错误,则需要清除它:

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

然后will work.

答案 1 :(得分:1)

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