다음 C++ 코드가 EOF를 돌 때까지 (한 줄에 하나 개의 번호를 가지고있는) 텍스트 파일에서 정수를 읽어 ifstream 객체를 사용을 반복합니다. 마지막 행의 정수를 두 번 읽는 이유는 무엇입니까? 이 문제를 해결하는 방법?은 마지막 줄
코드 :
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream iFile("input.txt"); // input.txt has integers, one per line
while (!iFile.eof())
{
int x;
iFile >> x;
cerr << x << endl;
}
return 0;
}
input.txt를 :
10
20
30
출력 :
10
20
30
30
참고 : 코드 스 니펫을 작게 유지하기 위해 모든 오류 검사 코드를 건너 뛰었습니다. 위의 동작은 Windows (Visual C++), cygwin (gcc) 및 Linux (gcc)에서 볼 수 있습니다.
'while (iFile >> x)'을 사용하십시오. 정수를 읽고 스트림을 반환합니다. 스트림이 bool 값으로 사용되면 스트림이 유효한지 확인합니다. 유효 함은 eof()와 bad()가 모두 거짓임을 의미합니다. http://stackoverflow.com/questions/21647/c-reading-from-text-file-until-eof-repeats-last-line#21666 –
위와 동일한 정신 : 'while (true)'대신, 'while (file.good())'를 쓰는 것이 더 좋습니다. – PHF
오류 또는 파일 끝까지 파일을 읽는 방법을 잘 모르는 경우이 기사를 읽으십시오 (아주 좋은 설명) https://gehrcke.de/2011/06/read-files-in-c-using-if-bad-failbit-eofbit-and-perror/ – stviper