> 백엔드 개발 > C++ > C의 `ifstream::eof()` 함수는 `get()` 및 추출 연산자와 실제로 어떻게 작동합니까?

C의 `ifstream::eof()` 함수는 `get()` 및 추출 연산자와 실제로 어떻게 작동합니까?

Susan Sarandon
풀어 주다: 2024-11-29 18:48:11
원래의
457명이 탐색했습니다.

How Does C  's `ifstream::eof()` Function Really Work with `get()` and the Extraction Operator?

ifstream의 eof() 함수 이해

ifstream 클래스의 eof() 함수는 C의 파일 입력 작업에서 중요한 역할을 합니다. 그러나 그 동작은 특히 get() 함수와 관련하여 때때로 혼란스러울 수 있습니다.

제공된 예를 고려하십시오.

#include <iostream>
#include <fstream>

int main() {
    std::fstream inf( "ex.txt", std::ios::in );
    while( !inf.eof() ) {
        std::cout << inf.get() << "\n";
    }
    inf.close();
    inf.clear();
    inf.open( "ex.txt", std::ios::in );
    char c;
    while( inf >> c ) {
        std::cout << c << "\n";
    }
    return 0;
}
로그인 후 복사

입력 파일 "ex.txt"에 다음이 포함된 경우 "abc", 첫 번째 while 루프는 종료되기 전에 4개의 문자를 읽습니다. 이는 eof()가 파일 끝을 지나서 읽으려고 시도한 후에만 EOF 플래그를 설정하기 때문입니다. 첫 번째 루프는 실패한 읽기에 도달할 때까지 문자별로 읽고 EOF 플래그를 설정합니다. 그러나 get()은 EOF 플래그를 고려하지 않고 파일 끝을 나타내기 위해 -1을 반환합니다.

>> 연산자는 올바른 동작을 나타냅니다. >> 연산자는 문자(이 경우 문자열) 읽기를 시도하고 읽기 실패 시 EOF 플래그를 설정합니다. 따라서 "abc"를 읽은 후 루프가 종료됩니다.

혼란 해결

혼란을 피하려면 다음 사항에 유의하는 것이 중요합니다.

  • -1은 파일 끝을 나타내는 get()의 방법입니다.
  • eof() 세트 파일 끝 이후에 읽기 시도가 실패한 후 EOF 플래그.
  • 읽기 및 EOF 플래그 업데이트를 모두 수행합니다.

따라서 , >>를 사용하여 파일의 끝을 정확하게 감지하려면 eof()보다 get()을 사용하는 것이 좋습니다.

위 내용은 C의 `ifstream::eof()` 함수는 `get()` 및 추출 연산자와 실제로 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿