从文件中读取整数时的无限循环

时间:2015-07-24 11:08:16

标签: c++

我有两个文件。 main.cpp中:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream file;
    file.open("file.txt");

    if (!file.good()) {
        cout << "Error." << endl;
        return 1;
    }

    int n;
    while (!file.eof()) {
        file.clear();

        file >> n;
        if (!file.good() && !file.bad()) {
            continue;
        } else {
            cout << "Hardware error." << endl;
            break;
        }
        cout << n << endl;
    }

    file.close();

    return 0;
}

和file.txt:

a 1 2 321b9 ac.de ef#@g 5 #3

我想只读取此文件中的整数并将其写入控制台。当文件只包含整数时,程序运行良好,但当它包含任何无效字符时,我会得到无限循环。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

循环是因为流不提取非整数的字符。您需要在尝试读取另一个整数之前将其解压缩。

可能只需要一点小小的调整就可以了;

// on a failed read...
file.clear();
char dummy;
file >> dummy;
continue;

关于使用while (!file.eof())的附注;通常不建议这样做。在这个问题上,SO上有几个Q&amp; A。