C에서 ifstream을 사용할 때 마지막 줄을 두 번 읽는 것을 어떻게 방지할 수 있습니까?
스트림 상태 관리: 마지막 줄 두 번 읽기 방지
ifstream을 사용하여 파일을 읽을 때 스트림 상태를 올바르게 관리하는 것이 중요합니다. 마지막 줄을 두 번 읽는 등의 예상치 못한 동작을 방지하기 위해
왜 이중 읽기를 해야 할까요? 발생
루프 조건에서 f.good() 또는 !f.eof()를 사용하면 마지막 줄을 두 번 읽을 수 있습니다. 그 이유는 다음과 같습니다.
- f.good(): 지금까지 발생한 오류가 없는지 확인하고 다음 작업(예: getline)이 수행되는지 여부는 나타내지 않습니다. 성공합니다.
- !f.eof(): 스트림이 끝까지 도달하지 않았는지 확인합니다. 하지만 다음 작업의 성공을 보장하지는 않습니다.
파일 끝에 getline이 실패하게 만드는 불완전하거나 잘못된 줄이 있을 수 있습니다. 루프 조건에서 f.good() 또는 !f.eof()를 사용하면 getline이 실패한 후에도 루프가 계속되어 마지막 유효한 줄을 다시 읽게 됩니다.
올바른 스트림 상태 관리
이 문제를 방지하려면 원하는 입력 작업을 수행한 후 스트림 상태를 확인해야 합니다. 이 작업은 다음 기술을 사용하여 수행할 수 있습니다.
-
getline 이후:
if (getline(stream, line)) { use(line); } else { handle_error(); }
로그인 후 복사 -
After 연산자>>:
if (stream >> foo >> bar) { use(foo, bar); } else { handle_error(); }
로그인 후 복사
모든 행을 읽고 처리하려면 다음 루프 구성을 권장합니다.
for (std::string line; getline(stream, line);) { process(line); }
이 루프는 자동으로 종료됩니다. getline이 다른 줄을 읽지 못하는 경우.
참고 사항 good()
good() 함수의 이름은 오해의 소지가 있을 수 있습니다. 이는 지금까지 오류가 발생하지 않았음을 나타낼 뿐, 다음 작업이 성공할 것이라는 의미는 아닙니다. 따라서 향후 입력 작업의 결과를 예측하기 위해 good()을 사용하는 것은 일반적으로 권장되지 않습니다.
위 내용은 C에서 ifstream을 사용할 때 마지막 줄을 두 번 읽는 것을 어떻게 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
