2013-05-29 4 views
0

ifstream :: getline 호출이 delimeter를 찾지 못하면 failbit를 설정하지만 버퍼를 지우거나 버퍼를 그대로두고 그냥 실패 비트를 설정하여 알고있다? here 가입일ifstream getline이 delim을 찾지 못함

+0

그것은 'failbit' 설정되기 전에 추출 무엇 containting 버퍼 그대로 남긴다. – jrok

답변

0

이 입력 스트림의 다양한 상태에 대한 혼란을 것 같다 (DyP의 주석을 참조하십시오) :

C++ 표준, 테이블 (124)

  • badbit은 입력 또는 출력 시퀀스에서 무결성 손실 (파일에서 복구 할 수없는 읽기 오류 등)을 나타냅니다.
  • eofbit은 입력 작업이 입력 시퀀스의 끝에 도달했음을 나타냅니다.
  • failbit은 입력 작업이 예상 된 문자를 읽지 못했음을 나타내거나 은 출력 작업이 원하는 문자를 생성하지 못했음을 나타냅니다. 이다

failbit이 설정되어있는 경우 구분 기호 (저장 종료 \0에 대한 -1를) 찾을 수없는 basic_istream::getline(char_type* s, std::streamsize count, char_type delim) 추출물 count-1 문자. 스트림이 bad임을 나타내지는 않지만 getline이 구분 기호를 찾지 못했음을 나타냅니다. C++ 표준에 basic_istream::getline

설명 : [istream.unformatted]/18

  • 효과 : [...] [= 제조, 입력 및 에러 검사를위한] 센트리 객체를 구축 한 후, 문자를 추출하여 첫 ​​번째 요소가 s으로 지정된 배열의 연속적인 위치에 문자를 저장합니다. (이 경우에 함수를 호출 setstate(eofbit)) 입력 시퀀스 발생
    1. 파일 끝 다음 중 하나가 발생할 때까지문자를 추출하여 저장된
    2. traits::eq(c, delim) [사용 가능한 다음 입력 문자 c (입력 문자가 추출되었지만 저장되지 않은 경우)에 대한 구분 기호가 있습니다.
    3. n이 1보다 작거나 n - 1 문자가 저장됩니다 (이 경우 함수는 setstate(failbit)을 호출 함). [...]
  • 이러한 조건은 표시된 순서대로 테스트합니다.
  • 함수가 어떤 문자를 추출하지 않는 경우, 그것은 n가 0보다 큰 경우 setstate(failbit)가 [...] 어떤 경우
  • 가, 그 다음의 다음의 연속적인 위치에 널 문자를 [...] 저장 호출 정렬.

[중점 및 누락 광산]

0

:

내부의 함수 (true로 설정 noskipws)와 센 객체를 구성하는 제 하여 입력 시퀀스를 액세스한다. 그런 다음 ( 이 좋은 경우) 연결된 스트림 버퍼 객체 에서 문자를 마치 sbumpc 또는 sgetc라는 멤버 함수를 호출하는 것처럼 추출하고 마지막으로 은 반환하기 전에 보조 객체를 파괴합니다.

문제가 발생할 때까지 버퍼가 채워진 것 같습니다. (그들은 는 혼란, 그래서 당연히와)

+0

나는이 행동에 대한 더 많은 정보를 얻으려는 노력을하고 있지만 이해할 수는 없다. – Djon

+0

나는 그렇게 생각하지 않는다 ?? 보초 개체는 스트림이 양호한 지 여부를 확인하는 것입니다. 'getline'은 파일이 끝날 때까지 **를 추출합니다 **; [cppreference] (http://en.cppreference.com/w/cpp/io/basic_istream/getline) 또는 Standard [istream.unformatted]/18, "문자는 다음 중 하나가 발생할 때까지 추출되어 저장됩니다." – dyp

+0

오 그럼, 해명 해줘서 고마워. – Djon