Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menguji Akhir Fail Dengan Betul Apabila Membaca dari Strim Fail dalam C?

Bagaimana untuk Menguji Akhir Fail Dengan Betul Apabila Membaca dari Strim Fail dalam C?

Linda Hamilton
Lepaskan: 2024-12-21 15:33:10
asal
695 orang telah melayarinya

How to Correctly Test for End-of-File When Reading from a File Stream in C  ?

Menguji Keadaan Input Strim lwn. Kejayaan Masa Hadapan

Apabila membaca input menggunakan strim, adalah penting untuk memahami perbezaan antara menguji keadaan aliran dan meramalkan kejayaan operasi masa hadapan.

Isu: Membaca Baris Terakhir Dua kali

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
Salin selepas log masuk

Dalam kod ini, baris terakhir dibaca dua kali kerana f.good() menguji keadaan strim semasa, bukan sama ada getline() akan berjaya. Setelah getline() mencapai EOF, f kekal dalam keadaan "baik", jadi gelung diteruskan walaupun selepas baris terakhir dibaca.

Penyelesaian: Strim Ujian Selepas Operasi

Sebaliknya, semak keadaan strim selepas melakukan operasi input:

ifstream f("x.txt");
string line;
while (getline(f, line)) {
  // Use line here.
}
Salin selepas log masuk

Penggunaan Alternatif eof()

Walaupun tidak disyorkan untuk menggunakan eof() dalam keadaan gelung, berikut ialah penyelesaian yang setara menggunakan !f.eof():

ifstream f("x.txt");
string line;
while (!f.eof()) {
  if (getline(f, line)) {
    // Use line here.
  } else {
    break;
  }
}
Salin selepas log masuk

Julat -Gelung Berasaskan untuk Semua Baris

Untuk membaca dan memproses semua baris, gunakan julat berasaskan gelung:

ifstream f("x.txt");
for (std::string line; getline(f, line);) {
  process(line);
}
Salin selepas log masuk

Good vs. Stream State

Perhatikan bahawa f.good() salah nama. Ia tidak benar-benar menunjukkan "kebaikan" aliran tetapi sebaliknya kembali benar apabila aliran tidak berada dalam keadaan "gagal" atau "buruk". Sentiasa uji strim itu sendiri (iaitu, semak keadaan gagal terbaliknya) selepas melakukan operasi input untuk memastikan kejayaan.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Akhir Fail Dengan Betul Apabila Membaca dari Strim Fail dalam C?. 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