C ++继续读取文件后eof()?

时间:2012-03-30 18:09:32

标签: c++ file-io eof

我正在构建一个读取文本文件的程序,其中包含一个数字列表。这些列表包含一系列有序数字,每个数字可能包含不同数量的值。例如,文件1可以具有2个数字的列表,文件2可以具有20的列表。

程序的要点是逐行读取每个文本文件(按升序排列的数字),然后按升序将它们放入新的文本文件中。但是,如果一个列表确实很短,那么我将收到eof()错误,导致文件读取器进入失败状态,这将不允许它读取较长文本文件中的剩余值。 / p>

这是我的代码,它迭代两个文本文件:

int main() {
int numbers1 = 0, numbers2 = 0, fillCounter = 0, iteration = 0;
char grabNext = 'b';
ifstream file1, file2, fileFiller;
ofstream fout;
file1.open("numbers1.txt");
file2.open("numbers2.txt");
fout.open("output.txt");

//Check and see if the opening operation was successful
if (file1.fail() || file2.fail()) {
    cout << "The progran could not open the related necessary files. Check and see if they exist!"
         << endl;

    exit(1);
}

do {
//In theory, whenever the file1 gives an eof, I should be able to iterate over the remaining lines of file2
    if (file1.eof()) {
        do {
            fout << numbers2 << endl;
        } while(!file2.eof());

        break;
    }

//In theory, whenever the file2 gives an eof, I should be able to iterate over the remaining lines of file1
    if (file2.eof()) {
        do {
            fout << numbers1 << endl;
            break;
        } while(!file1.eof());

        break;
    }

    if (grabNext == 'b') {
        file1 >> numbers1;
        file2 >> numbers2;
    } else if (grabNext == 'l') {
        file1 >> numbers1;
    } else if (grabNext == 'u') {
        file2 >> numbers2;
    }

    cout << numbers1 << " " << numbers2 << endl;

    if (numbers1 < numbers2) {
        fout << numbers1 << endl;
        grabNext = 'l';
    } else if (numbers1 > numbers2) {
        fout << numbers2 << endl;
        grabNext = 'u';
    }

    iteration++;
} while(true);

}

以下是示例文本文件1:

-1
3
5
7
9

以下是示例文本文件2:

2
4
10
12
16

我的问题是,在我从一个文件到达eof()后,我可以继续阅读另一个文件,直到该文件到达eof()

我一直在寻找没有运气的地方。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

请注意,您还有无限循环:

do {
        fout << numbers1 << endl;
        break;
    } while(!file1.eof());

循环内部没有任何变化导致file1接近eof()。