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:
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!