2015-01-29 1 views
0

저는 지금 당장 바인딩이 어려우며 가장 문제가 있다는 것을 알고 있지만 해결할 수는 없습니다. (EOF까지 계속되는 getline 함수와 결합하여 while 루프 구조를 만들었습니다.

내 목표는 궁극적으로 (텍스트 파일) 재 입력에서 문자열의 라인을 읽고 EOF에 도달 할 때까지 계속하는 한, getline을 사용하는 것입니다

예 텍스트 파일 (내용) :.

안녕하세요 !

안녕히 가세요.

내 소스 코드 (단지 그것이 작동하지 않습니다 섹션 포함) :

while (!(getline(std::cin, s_array)).eof()){ // it won't read second line 
//do some awesome stuff to the first line read! 
} 
내가 아는 한

이의 getline은 줄 바꿈 개까지 모든 것을 읽고 우리가 계속 얻을 어떻게 그렇게 중지를 항상 Hello World에서 멈추기 때문에 읽기!.

+1

대괄호는 균형이 맞지 않습니다 ... –

+0

오, 그래, 내 나쁜 X.X, 그들은 코드에서 실제로 옳다는 것을 확신하므로, 나는 틀린 부분에 틀어 놓았어야합니다. – user152573

+1

여전히 소식을 수정할 수 있습니다. 그러나 게시 정보를 모두 삭제 한 다음 게시 지침을주의 깊게 읽는 것이 좋습니다. 특히 의도 한대로 작동하지 않는 코드 단편에 대한 도움을 특히주의하십시오. –

답변

3

대신 while (getline(std::cin, s_array)) { }을 사용하십시오.

std::getline()istream&이고, 오류 플래그가 설정 될 때마다 istream::operator void*()false으로 평가됩니다.

+0

어디서나 EOF를 포함시키지 마십시오. getline 기능은 암묵적으로 EOF에서 중단됩니까? – user152573

+1

@ user152573 호출중인 기능에 대한 설명서를 읽으십시오. 'getline'이 라인을 읽지 못하면 스트림은 에러 상태가됩니다. 'eof'를 검사 할 필요는 없으며, 당신이 성공했는지 또는 줄을 읽지 못했는지를 알아야합니다. –

+0

설명해 주셔서 감사합니다. – user152573

0

조셉 맨스필드 (Joseph Mansfield)의 블로그 게시물 "Don't condition input on eof()"을 읽고이 함정을 자세히 설명하고 잘 설명 된 가이드 라인을 제공해야합니다.