숫자 목록이 들어있는 텍스트 파일을 읽는 프로그램을 작성 중입니다. 이 목록에는 일련의 정렬 된 숫자가 있으며 각 숫자에는 다양한 양의 값이 포함될 수 있습니다. 예를 들어, 파일 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' 플래그는 미래를 예측하지 않습니다. 미래의 읽기가 성공할 지 여부는 알려주지 않지만 과거의 읽기가 실패한 이유 만 알려줍니다. 실패를 처리하고 두 파일이 모두 실패한 경우에만 중지 할 수있는 읽기 기능을 사용해야합니다. –
답변 해 주셔서 감사합니다, David. 나는 C++에 비교적 익숙하지 않다. 당신이 말하는 것에 대해 데모 할 수있는 기회가 있습니까? –
실패를 처리하고 읽은 데이터 만 처리 할 수있는 방식으로 데이터를 읽는 방법에 대한 예는 [이 페이지] (http://mathbits.com/mathbits/compsci/files/end.htm)를 참조하십시오. 성공했다. –