2012-08-26 9 views
3

이 프로그램을 볼 수 있습니다. 그래서 if 조건이 참이어야한다고 생각합니다.하지만 그렇지 않습니다.C++는 다음과 같습니다</p> <pre><code>ifstream filein("hey.txt"); if(filein.eof()){ cout<<"END"<<endl; } </code></pre> <p>"hey.txt"비어 : .eof 빈 파일에

파일이 비어 있더라도 왜 eof가 true를 반환하지 않습니까?

arr 여전히 비어 있고 파일이 너무 모두 변경

char arr[100]; 
filein.getline(arr,99); 
+0

@uberwulu : "... EOF 문자를 읽습니다." - 무슨 EOF 캐릭터 야? shells/command-prompts는 문자를 사용하여 키보드의 사용자가 파일의 끝을 표시 할 수있게하지만 모든 현대 OS에서 파일이 실제로 EOF 문자를 포함하지 않는다는 것을 알고 있습니다 ... EOF는 아무 것도 없을 때 설정된 상태입니다 독서. –

답변

5

eof() 기능은 프로그램이 읽기를 시도 후 "true"를 반환 여전히 비어 있지만 EOF가 true를 돌려 if하기 전에이 작업을 추가 한 경우 파일의 끝을 지나쳐.

std::ifstream::peek()을 사용하여 "논리적 인 파일 끝"을 확인할 수 있습니다.

3

플래그 std::ios_base::eofbit은 읽기를 시도하는 동안 스트림의 끝에 도달하면 설정됩니다. 스트림의 끝까지 읽으 려 할 때까지이 플래그는 설정되지 않습니다.

일반적으로 std::ios_base::eofbit의 사용은 다소 제한적입니다. 유일한 합당한 사용법은 실패한 읽기 후에 오류를 억제하는 것입니다. 파일의 끝에 도달하여 읽기가 실패하면 일반적으로 오류가 아닙니다. 이 플래그를 다른 것으로 사용하려고하면 작동하지 않습니다.

3

eof()은 "파일 끝"플래그가 C++ 스트림 개체에 설정되어 있는지 여부를 테스트합니다. 이 플래그는 읽기 조작으로 기본 장치 (파일, 표준 입력, 파이프 등)의 입력 끝을 알릴 때 설정됩니다. 빈 파일에 대한 읽기를 시도하기 전에 플래그가 설정되지 않습니다. 스트림 개체에 플래그가 설정되기 전에 무언가를 읽으려는 작업을 수행해야합니다.