2014-04-13 4 views
0
string line; 
getline (cin, line); 
if(line.empty() && !cin.eof()) continue; 
if (cin.eof()) { 
    if (need_echo) cout << "^D"; 
    cout << endl; 
    DEBUGF ('y', "EOF"); 
    break; 
} 

getline(cin, line)은 빈 줄을 스캔 할 때 거짓 cin.eof입니까?C++ EOF 빈 라인 혼란

+2

'cin.eof'는 항상 false를 반환해야하며 대신'getline (cin, line)'의 결과를 확인하십시오. –

+3

@ πάνταῥε pipe 파이프가 없거나 사용자가 eof (리눅스 터미널에서 ctrl-d)를 입력하지 않으면 –

+0

@ DieterLücking 예. 그렇기 때문에 설명을 위해 _mould_ 또는 _will_ ... THX가 아닌 _should_를 썼습니다. –

답변

1

EOF (파일 끝)가 줄의 끝과 다르기 때문에. Thats가 빈 줄로 채워진 파일을 가질 수 있습니다. 예를 들어 줄 끝 문자를 많이 써주십시오.

0

"빈 줄"이란 무엇을 의미합니까? 줄 문자가 없거나 끝에 줄 바꿈이 있습니까? 그 라인이 정말로 비어 있다면 std::getline()은 EOF를 읽고 std::ios_base::eofbitstd::cin의 스트림 상태로 설정했을 것입니다. 끝 부분에 개행 문자가있는 경우 입력의 끝 부분에 도달했으나 이 아니고 이 아닌이 설정되었습니다.