Menggunakan fstream untuk operasi input fail selalunya melibatkan pemeriksaan keadaan strim untuk menentukan bila hendak berhenti membaca. Walau bagaimanapun, menggunakan bendera negeri tertentu boleh membawa kepada isu yang tidak dijangka, seperti membaca baris terakhir dua kali. Artikel ini meneroka punca asas dan menyediakan penyelesaian untuk mengelakkan masalah ini.
Mengapa Baris Terakhir Dibaca Dua Kali
Isu timbul apabila menggunakan kebaikan() atau ! eof() keadaan dalam gelung sementara yang menggunakan getline() untuk membaca baris daripada fail. Inilah sebabnya mengapa ini berlaku:
Betulkan: Gunakan getline()'s nilai pulangan untuk menyemak bacaan baris yang berjaya:
while (getline(stream, line)) { // Use line here. }
Betulkan: Semak sama ada operasi getline() adalah berjaya sebelum menyemak EOF:
if (getline(stream, line)) { // Use line here. } else if (stream.eof()) { // Handle end-of-file condition. } else { // Handle error condition. }
Terbaik Amalan
Untuk mengelakkan isu ini dan memproses baris fail dengan cekap, pertimbangkan perkara berikut:
if (stream >> foo >> bar) { // Use foo and bar here. } else { // Handle error condition. }
for (string line; getline(stream, line);) { // Use line here. }
Dengan mengikuti garis panduan ini, anda boleh mengelak daripada membaca baris terakhir dua kali secara tidak sengaja dan memastikan pemprosesan input fail yang boleh dipercayai dengan fstream.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Pembacaan Baris Terakhir Dua Kali Apabila Menggunakan `fstream` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!