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
Linda Hamiltonasal
2024-12-21 15:33:10771semak imbas

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

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

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

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);
}

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!

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