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
Lepaskan: 2024-11-29 18:48:11
asal
457 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan