This question already has an answer here:
invalid int input gets stuck in an infinite loop [duplicate]

(1个答案)


4年前关闭。




给出以下程序
#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.

关于c++ - 读到C++中的新行陷入无限循环[duplicate],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39480438/

10-11 15:11