스트림의 끝이면 true를 반환한다.
그러나 이 '끝'에 도달하기 위해서는
읽을 게 없는 스트림 위치에서 한번 더 읽는 시도를 해야(read() 나 get() 멤버호출) 도달한다.
예를 들어,
10개 레코드가 저장된 이진파일스트림에서 레코드를 10번 순차적으로 읽은 후 eof()호출할 시 false 가 반환되며,
그 다음 읽기 함수를 호출하고 난 뒤에야(물론 이때 읽기 함수는 오류를 반환하면서 리턴될 것이다)
eof() 호출 시 true가 반환된다.
여기에 허접한 예제 코드 하나(나 이외에는 참고하지 말 것).
이 코드에서 반복문의 종료조건은 어떻게든 줘도 되겠지만, read() 호출 후 eof() 점검을 하는 if문이 없으면
read()호출이 실패했을 때(예를 들면 끝을 만나서 읽을 게 없을 경우)
이전 반복문으로 저장되었던 oneRecord 변수의 값을 이용하게 되므로 오류가 생긴다.
while(!data.eof()) { data.read((char*)&oneRecord,sizeof(double)); if(!data.eof()) { dSum+=oneRecord; ++numRecords; } }
'Application-level프로그래밍' 카테고리의 다른 글
Java API (0) | 2011.04.04 |
---|---|
STL set 이용하기 (0) | 2010.10.27 |
(C++) fstream 이용하기 (0) | 2010.08.18 |
(STL) 'iterator' : unspecialized class template can't be used as a template argument for template parameter (0) | 2010.08.17 |
(C) main() 의 인자. (0) | 2010.08.17 |