我正在構建一個讀取包含數字列表的文本文件的程序。這些列表包含一系列排序的數字,每個數字可能包含不同數量的值。例如,文件1可以具有2個數字的列表,並且文件2可以具有20個列表。C++繼續閱讀eof()後的文件?
程序的要點是逐行讀取這些文本文件中的每一個(其包含數字,以升序排列) ,然後按升序將它們放入一個新的文本文件中。但是,如果一個列表非常短,那麼我將得到一個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()
?
我一直在尋找無處不在的地方。
謝謝你的時間。
'eof'標誌不預測未來。它不會告訴你未來的閱讀是否會成功,但只是爲什麼過去的閱讀失敗。您需要使用讀取功能,以便您可以處理故障,然後僅在兩個文件都失敗時停止。 – 2012-03-30 18:13:23
謝謝你的迴應,David。我對C++比較陌生。有沒有可能演示你在說什麼? – 2012-03-30 18:14:37
請參閱[本頁](http://mathbits.com/mathbits/compsci/files/end.htm),以獲取如何讀取數據的示例,以便您可以處理故障,然後僅在讀取數據時處理數據成功了。 – 2012-03-30 18:16:05