eof() Penggunaan dalam Input Fail: Amalan Kontroversi
Soalan:
Walaupun penggunaan biasa dalam program input fail, fungsi eof() telah mencetuskan kontroversi. Walaupun sesetengah pengaturcara menganggapnya boleh diterima, yang lain menasihatkan supaya tidak menggunakannya. Soalan ini meneroka sebab di sebalik perpecahan ini.
Jawapan:
Fungsi eof() berfungsi untuk tujuan tertentu: untuk mengenal pasti percubaan membaca melebihi penghujung fail . Walau bagaimanapun, ini adalah pilihan yang lemah untuk menguji sama ada input tambahan kekal atau sama ada operasi baca berjaya, dua lagi senario biasa.
Mengapa Ia Dianggap Amalan Buruk:
The sebab utama eof() tidak digalakkan ialah kekaburannya. Ia hanya menunjukkan sama ada percubaan untuk membaca melepasi hujung fail telah berlaku. Ia tidak memberikan maklumat tentang sama ada data yang sah sebenarnya telah dibaca atau jika terdapat lebih banyak data untuk diproses.
Contoh Penggunaan Tidak Wajar:
Pertimbangkan penggunaan yang salah berikut:
while (!cin.eof()) { cin >> foo; }
Gelung ini menganggap bahawa eof() boleh menentukan sama ada terdapat baki input untuk dibaca. Walau bagaimanapun, jika operasi baca gagal atas sebarang sebab selain daripada mencapai penghujung fail (cth., format tidak sah), gelung akan diteruskan selama-lamanya.
Penggunaan Betul:
Untuk menguji keadaan khusus yang diwakili oleh eof(), gunakan pendekatan berikut:
if (!(cin >> foo)) { if (cin.eof()) { cout << "Read failed due to EOF\n"; } else { cout << "Read failed due to something other than EOF\n"; } }
Atas ialah kandungan terperinci Adakah `eof()` dalam Input Fail adalah Amalan Baik, dan Mengapa Ia Kontroversial?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!