>백엔드 개발 >C++ >텍스트 파일을 읽을 때 EOF 검사가 마지막 줄을 반복하는 이유는 무엇입니까?

텍스트 파일을 읽을 때 EOF 검사가 마지막 줄을 반복하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-31 12:18:09778검색

Why Does My EOF Check Repeat the Last Line When Reading a Text File?

중복 버그: EOF가 텍스트 파일 읽기에서 마지막 줄을 반복합니다

문제의 코드는 텍스트 파일에서 정수를 한 줄씩 읽는 것을 목표로 합니다. 파일 끝(EOF) 표시기에 도달할 때까지. 그러나 최종 반복에서는 예기치 않게 마지막 정수를 두 번 읽습니다.

문제 원인:

문제는 파일 읽기의 특성에 있습니다. 입력 스트림이 EOF 표시에 도달하면 ios::eofbit가 발생합니다. 이 비트는 스트림이 파일 끝에 있다는 것이 아니라 마지막 읽기 작업에서 EOF가 발생했음을 나타냅니다.

세부 분석:

다음 이벤트 시퀀스를 고려하세요. :

  1. 정수 10을 읽습니다.
  2. 정수를 읽습니다. 20.
  3. 정수 30을 읽습니다.
  4. 30을 읽은 후 EOF를 발견합니다.

마지막 반복에서 정수 30은 여전히 ​​현재 값입니다. 입력 스트림. EOF가 발견되면 ios::eofbit가 발생하지만 x 값은 30으로 유지됩니다. 코드는 계속해서 x 값(30)을 출력하고 루프 조건에서 EOF를 확인합니다. 이제 EOF가 설정되었으므로 프로그램이 루프를 종료합니다.

권장 수정:

이 버그를 해결하려면 루프 조건을 보다 명시적인 EOF 검사로 바꾸십시오.

while (true) {
    int x;
    iFile >> x;
    if (iFile.eof()) break;
    cerr << x << endl;
}

각 읽기 작업 후에 EOF를 명시적으로 확인하여 코드는 마지막 정수를 읽지 않도록 보장합니다.

추가 버그:

원본 코드에는 오류 검사 기능도 부족합니다. 입력 파일이 비어 있으면 첫 번째 읽기 작업에서 EOF를 만날 때까지 eofbit가 발생하지 않으므로 루프가 종료되지 않습니다. 이를 방지하려면 파일에서 읽기를 시도하기 전에 적절한 오류 처리를 추가하세요.

위 내용은 텍스트 파일을 읽을 때 EOF 검사가 마지막 줄을 반복하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.