Rumah > pembangunan bahagian belakang > C++ > Mengapa Kod C Saya Membaca Baris Terakhir Fail Teks Dua Kali Apabila Menyemak EOF?

Mengapa Kod C Saya Membaca Baris Terakhir Fail Teks Dua Kali Apabila Menyemak EOF?

Barbara Streisand
Lepaskan: 2024-12-27 15:20:15
asal
948 orang telah melayarinya

Why Does My C   Code Read the Last Line of a Text File Twice When Checking for EOF?

Menyelesaikan masalah Pembacaan EOF daripada Fail Teks

Apabila membaca daripada fail teks sehingga akhir fail (EOF) dicapai, adalah penting untuk memahami gelagat aliran input untuk mengelakkan baris pendua.

Dalam C , objek ifstream ialah digunakan untuk membaca daripada fail teks. Kod yang disediakan menggambarkan pendekatan biasa untuk membaca integer daripada fail teks, tetapi ia menghadapi isu apabila baris terakhir dibaca dua kali.

Memahami Isu

The masalah timbul kerana fungsi eof() menyemak EOF berdasarkan penunjuk dalaman strim, yang diletakkan selepas aksara terakhir fail apabila EOF dicapai. Kod membaca baris terakhir sekali apabila ia menemui integer dan sekali lagi apabila ia menyemak EOF dalam gelung.

Penyelesaian

Untuk membetulkannya, dinasihatkan untuk menyemak untuk EOF sebelum membaca integer dalam gelung. Ini memastikan bahawa integer terakhir dibaca sekali sahaja:

while (!iFile.eof())
{
    if (iFile.peek() != EOF)
    {
        int x;
        iFile >> x;
        cerr << x << endl;
    }
}
Salin selepas log masuk

Di sini, iFile.peek() menyemak aksara seterusnya dalam strim tanpa benar-benar membacanya. Jika ia bukan EOF, maka integer dibaca dan dikeluarkan.

Pendekatan Alternatif

Selain itu, kod boleh ditulis semula menggunakan fungsi getline untuk membaca keseluruhan baris daripada fail dan kemudian menghuraikan integer secara manual. Pendekatan ini mengelakkan isu EOF sama sekali:

ifstream iFile("input.txt");

while (getline(iFile, line))
{
    istringstream ss(line);
    int x;
    ss >> x;
    cerr << x << endl;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Kod C Saya Membaca Baris Terakhir Fail Teks Dua Kali Apabila Menyemak EOF?. 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