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