2013-05-15 3 views
3

나는 우리가 할 수있는 경우에 알고 싶습니다 :실용적인 경우 bool (std :: ifstream)! = std :: ifstream :: good()?

bool(std::ifstream) != std::ifstream::good() 

의 차이는 bool(std::ifstream)std::ifstream::good() 테스트 반면 eof 비트를 테스트하지 않습니다. 그러나 실질적으로 파일의 끝에서 뭔가를 읽으려고하면 eof 비트가 발생합니다. 그러나 이것을 시도하자마자 fail 또는 bad 비트가 설정되어 있다고 생각합니다.

따라서 어떤 경우에만 eof 비트를 올릴 수 있습니까?

+0

다른 오류 플래그와 독립적으로 eof 비트를 수동으로 설정할 수 있지만 어떤 상황에서 그렇게할지는 모르겠습니다. 'std :: ifstream :: setstate (std :: ios :: eofbit)'를 참조하십시오. – nebain

답변

0

파일의 끝에 읽지 않고 파일의 끝이 보일 때마다 간단히 말해서. 정확히 하나의 단일 '1'문자가 들어있는 파일 "one.txt"를 고려하십시오. 포맷되지 않은 입력

예 :!

0

#include <iostream> 
#include <fstream> 

int main() 
{ 
    using namespace std; 
    char chars[255] = {0}; 
    ifstream f("one.txt"); 
    f.getline(chars, 250, 'x'); 
    cout << f.good() << " != " << bool(f) << endl; 
    return 0; 
} 
= 1
눌러 계속하려면 아무 키나. . . 포맷 입력

예 :!

#include <iostream> 
#include <fstream> 

int main() 
{ 
    using namespace std; 
    ifstream f("one.txt"); 
    int i; f >> i; 
    cout << f.good() << " != " << bool(f) << endl; 
    return 0; 
} 

0 = 1
계속하려면 아무 키나 누르십시오. . .

관련 문제