Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Fungsi C `ifstream::eof()` Benar-benar Berfungsi dengan `get()` dan Operator Pengekstrakan?

Bagaimanakah Fungsi C `ifstream::eof()` Benar-benar Berfungsi dengan `get()` dan Operator Pengekstrakan?

Susan Sarandon
Susan Sarandonasal
2024-11-29 18:48:11519semak imbas

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

Memahami Fungsi eof() ifstream

Fungsi eof() kelas ifstream memainkan peranan penting dalam operasi input fail dalam C . Walau bagaimanapun, tingkah lakunya kadangkala membingungkan, terutamanya berkaitan dengan fungsi get().

Pertimbangkan contoh yang disediakan:

#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;
}

Apabila fail input "ex.txt" mengandungi "abc," gelung sementara pertama membaca empat aksara sebelum ditamatkan. Ini kerana eof() hanya menetapkan bendera EOF selepas percubaan membaca melepasi hujung fail. Gelung pertama membaca aksara demi aksara sehingga mencapai bacaan yang gagal, menetapkan bendera EOF. Walau bagaimanapun, get() mengembalikan -1 untuk menunjukkan akhir fail, tidak mengambil kira bendera EOF.

Gelung kedua, menggunakan >> operator, menunjukkan tingkah laku yang betul. Yang >> operator cuba membaca aksara (dalam kes ini, rentetan) dan menetapkan bendera EOF apabila gagal dibaca. Oleh itu, gelung berakhir selepas membaca "abc."

Menyelesaikan Kekeliruan

Untuk mengelakkan kekeliruan, adalah penting untuk ambil perhatian bahawa:

  • -1 ialah cara get() untuk menunjukkan akhir fail.
  • eof() menetapkan Bendera EOF selepas percubaan membaca yang gagal di luar penghujung fail.
  • melakukan kedua-dua kemas kini bendera baca dan EOF.

Oleh itu, menggunakan >> disyorkan berbanding eof() dengan get() untuk mengesan penghujung fail dengan tepat.

Atas ialah kandungan terperinci Bagaimanakah Fungsi C `ifstream::eof()` Benar-benar Berfungsi dengan `get()` dan Operator Pengekstrakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn