>백엔드 개발 >C++ >`ifstream::eof()`가 `get()` 및 추출 연산자(`>>`)와 다르게 동작하는 이유는 무엇입니까?

`ifstream::eof()`가 `get()` 및 추출 연산자(`>>`)와 다르게 동작하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-02 06:36:11937검색

Why Does `ifstream::eof()` Behave Differently with `get()` and the Extraction Operator (`>>`)?
>`)? " />

ifstream의 eof() 함수 자세히 알아보기

제공된 코드 조각에 설명된 것처럼 ifstream의 eof() 함수 동작을 이해하는 것은 어려울 수 있습니다.

<사전>

포함

include

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;

}

설명을 자세히 살펴보자 제공:

EOF가 실제로 설정되는 경우

eof() 함수는 읽기 작업이 파일 끝을 넘어서 데이터에 액세스하려고 시도하는 경우를 감지합니다.

  • "abc"라는 내용의 파일이 있고 3자를 읽으면 eof()는 다음과 같습니다. false.
  • 그러나 4번째 문자를 읽으려고 하면 eof()는 true가 되어 파일 끝에 도달했음을 나타냅니다.

이러한 동작의 이유 파일 크기 개념이 텍스트만큼 간단하지 않을 수 있는 파이프 및 소켓과 같은 다양한 장치와의 호환성을 보장하는 것입니다. file.

get() 및 >>

코드 조각의 두 루프는 서로 다른 접근 방식을 사용하여 파일 내용을 읽습니다.

  • 첫 번째 루프에서는 inf.get()을 사용하여 한 번에 하나씩 문자를 검색합니다. 파일 끝에 도달하면 get()은 -1을 반환합니다.
  • 두 번째 루프에서는 inf >> c는 읽기 시도와 할당을 하나의 작업으로 결합합니다. 이 접근 방식은 c를 파일에서 읽은 값으로 설정하지만, 읽기가 실패하면(파일 끝에 도달하여) false로 평가되어 루프를 종료합니다.

이것은 왜 첫 번째 루프는 추가 문자를 읽고 -1을 표시하는 반면 두 번째 루프는 올바른 출력을 제공합니다. 즉, 끝을 넘어 읽기를 시도하기 전에 루프를 종료합니다. file.

-1의 위험 방지

파일 끝을 식별하기 위해 매직 넘버 -1에 의존하지 않으려면 std를 사용하는 것이 좋습니다. :char_traits::eof() 또는 std::istream::traits_type::eof() 대신

위 내용은 `ifstream::eof()`가 `get()` 및 추출 연산자(`>>`)와 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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