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
Patricia Arquetteasal
2024-12-16 03:27:11924semak imbas

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
}

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!

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