2014-11-13 1 views
0

ifstream이 문자열의 마지막 값을 두 번 반환하는 이유는 무엇입니까? 입력과ifstream이 입력 파일의 마지막 값을 두 번 반환하는 이유는 무엇입니까?

size_t c; 
    while (1){ 
     myfile >> c; 
     cells.push_back(c); 
     if (myfile.eof()) break; 
    } 
    for (int i = 0; i < cells.size(); i++) cout << cells[i] << endl; 

2 3 
    9 7 11 
    12 5 6 
    3 4 

세포 [7] = 세포 [8] = 4

는 I 몇 흡사하여 입력하고 이것을했던 그들 모두를 위해 이것을하십시오.

+0

[개봉 된 날 동안! (myfile.eof())] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – Borgleader

답변

3

이 작업을 수행하는 관용적 인 방법이 완전히 그 이후, 그래서 마지막 값을 읽을 때 도달하지 않고, 스트림이 실패 할 때 읽기)를 EOF (같은 문제를 제거

while (myfile >> c){ 

} 

입니다 다른 push_back을 수행하지 못합니다. 위의 구성의 이점은 실패시 즉시 중단된다는 것입니다.

0

반환하는 데이터를 사용하기 전에 항상 I/O 연산 결과를 확인해야합니다.

이 경우 eof()에 대한 점검이 push_back() 호출보다 먼저 이루어져야 함을 의미합니다. 코드가 더 안전하도록하려면 fail()에 대한 확인을 스트림에 추가해야합니다. 스트림은 EOF에 도달하는 것 외의 다른 이유로 실패 할 수 있기 때문입니다.

관련 문제