我正在构建一个读取文本文件的程序,其中包含一个数字列表。这些列表包含一系列有序数字,每个数字可能包含不同数量的值。例如,文件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()
?
我一直在寻找没有运气的地方。
感谢您的时间。
答案 0 :(得分:1)
请注意,您还有无限循环:
do {
fout << numbers1 << endl;
break;
} while(!file1.eof());
循环内部没有任何变化导致file1接近eof()。