Rumah > pembangunan bahagian belakang > C++ > Mengapa Menggunakan `good()` atau `!eof()` Membaca Baris Terakhir Fail Dua Kali?

Mengapa Menggunakan `good()` atau `!eof()` Membaca Baris Terakhir Fail Dua Kali?

Patricia Arquette
Lepaskan: 2024-12-16 03:27:11
asal
861 orang telah melayarinya

Why Does Using `good()` or `!eof()` Read the Last Line of a File Twice?

Keadaan Strim Ujian: Mengapa Menggunakan good() atau !eof() Membaca Baris Terakhir Dua Kali

Apabila cuba membaca fail teks baris demi baris menggunakan ifstream, menggunakan f.good() atau !f.eof() dalam gelung boleh menyebabkan membaca baris terakhir dua kali. Mari kita selidiki sebab di sebalik tingkah laku ini dan terokai penyelesaian alternatif.

Memahami Fungsi Keadaan Strim

good(), eof(), dan fail() ialah keadaan aliran fungsi yang menunjukkan keadaan semasa aliran input. Walau bagaimanapun, mereka tidak meramalkan kejayaan atau kegagalan operasi input masa hadapan.

Sebab Membaca Baris Terakhir Dua Kali

Masalah berlaku kerana baik() dan eof( ) tidak semestinya menggambarkan hasil operasi input terakhir. Sebagai contoh, !f.eof() tidak menjamin bahawa getline() sebelumnya berjaya. Sebaliknya, tidak berada di EOF tidak membayangkan bahawa operasi input terakhir gagal.

Penyelesaian Alternatif: Menyemak Keadaan Strim selepas Operasi Input

Untuk membaca dan memproses baris dengan betul, adalah penting untuk menyemak keadaan strim selepas melakukan operasi input:

if (getline(f, line)) {
  // Use line here
} else {
  // Handle error or end of file
}
Salin selepas log masuk

Alternatif Penyelesaian: Melelakan dengan Gelung

Satu lagi penyelesaian elegan ialah menggunakan gelung yang berulang sehingga getline() gagal:

for (string line; getline(f, line);) {
  // Use line here
}
Salin selepas log masuk

Mengelakkan Fungsi yang Disalah Namakan

Akhir sekali, adalah penting untuk ambil perhatian bahawa good() ialah nama yang salah dan bukan setara dengan menguji aliran itu sendiri. Anda disyorkan untuk menggunakan teknik yang diterangkan di atas dan bukannya bergantung pada good().

Atas ialah kandungan terperinci Mengapa Menggunakan `good()` atau `!eof()` Membaca Baris Terakhir Fail Dua Kali?. 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