C ++ Продолжить чтение файла после eof ()? - PullRequest
0 голосов
/ 30 марта 2012

Я создаю программу, которая читает текстовые файлы, содержащие список чисел. Эти списки содержат ряд отсортированных чисел, каждый из которых может содержать различное количество значений. Например, файл 1 может иметь список из 2 чисел, а файл 2 может иметь список из 20.

Смысл программы заключается в том, чтобы читать каждый из этих текстовых файлов (которые содержат числа в порядке возрастания) построчно, а затем помещать их в новый текстовый файл в порядке возрастания. Однако, если один список действительно короткий, то я получу ошибку eof(), из-за которой программа чтения файлов перейдет в состояние сбоя, что не позволит ему прочитать оставшиеся значения в более длинном текстовом файле.

Вот мой код, который перебирает два текстовых файла:

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 Ответ

1 голос
/ 30 марта 2012

Обратите внимание, что у вас также есть бесконечные циклы:

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

Внутри цикла ничего не меняется, чтобы file1 приблизился к eof ().

...