Rumah > pembangunan bahagian belakang > C++ > Mengapa Semakan EOF Saya Mengulang Baris Terakhir Apabila Membaca Fail Teks?

Mengapa Semakan EOF Saya Mengulang Baris Terakhir Apabila Membaca Fail Teks?

Patricia Arquette
Lepaskan: 2024-12-31 12:18:09
asal
789 orang telah melayarinya

Why Does My EOF Check Repeat the Last Line When Reading a Text File?

Pepijat Pendua: EOF Mengulang Baris Terakhir dalam Bacaan Fail Teks

Kod yang dimaksudkan bertujuan untuk membaca integer daripada fail teks baris demi baris sehingga mencapai penunjuk akhir fail (EOF). Walau bagaimanapun, lelaran terakhir secara tidak dijangka membaca integer terakhir dua kali.

Akar Isu:

Isunya terletak pada sifat pembacaan fail. Apabila aliran input mencapai tanda EOF, ios::eofbit dinaikkan. Bit ini menunjukkan bahawa operasi baca terakhir menemui EOF, bukannya strim berada di penghujung fail.

Analisis Terperinci:

Pertimbangkan urutan peristiwa berikut :

  1. Baca integer 10.
  2. Baca integer 20.
  3. Baca integer 30.
  4. Temui EOF selepas membaca 30.

Dalam lelaran terakhir, integer 30 masih nilai semasa dalam aliran input. Apabila EOF ditemui, ios::eofbit dinaikkan, tetapi nilai x kekal 30. Kod meneruskan untuk mengeluarkan nilai x (iaitu 30) dan menyemak EOF dalam keadaan gelung. Memandangkan EOF kini ditetapkan, atur cara keluar dari gelung.

Pembetulan Cadangan:

Untuk menangani pepijat ini, gantikan keadaan gelung dengan semakan yang lebih jelas untuk EOF:

while (true) {
    int x;
    iFile >> x;
    if (iFile.eof()) break;
    cerr << x << endl;
}
Salin selepas log masuk

Dengan memeriksa EOF secara eksplisit selepas setiap operasi baca, kod memastikan bahawa yang terakhir integer tidak dibaca dan dicetak dua kali.

Pepijat Tambahan:

Kod asal juga tidak mempunyai semakan ralat. Jika fail input kosong, gelung tidak akan ditamatkan kerana eofbit tidak akan dinaikkan sehingga operasi baca pertama menemui EOF. Untuk mengelakkan ini, tambahkan pengendalian ralat yang sesuai sebelum cuba membaca daripada fail.

Atas ialah kandungan terperinci Mengapa Semakan EOF Saya Mengulang Baris Terakhir Apabila Membaca Fail Teks?. 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