首頁 >後端開發 >C++ >為什麼我的 C 程式碼在檢查 EOF 時會讀取文字檔案的最後一行兩次?

為什麼我的 C 程式碼在檢查 EOF 時會讀取文字檔案的最後一行兩次?

Barbara Streisand
Barbara Streisand原創
2024-12-27 15:20:15961瀏覽

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

從文字檔案讀取EOF 時的故障排除

從文字檔案讀取直到到達檔案結尾(EOF) 時,這一點很重要了解輸入流的行為以避免重複行。

在 C 中,ifstream物件用於讀取文字檔案。提供的程式碼說明了從文字檔案讀取整數的常見方法,但遇到了最後一行被讀取兩次的問題。

理解問題

出現問題的原因是eof() 函數根據流的內部指針檢查EOF,當到達EOF 時,該指針位於文件的最後一個字符之後。程式碼在遇到整數時會讀取最後一行一次,並在迴圈內檢查 EOF 時再次讀取最後一行。

要解決此問題,建議檢查for EOF 在讀取循環內的整數之前。這確保了最後一個整數只被讀取一次:

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

這裡,iFile.peek() 檢查流中的下一個字元而不實際讀取它。如果不是 EOF,則讀取並輸出整數。

替代方法

此外,可以使用 getline 函數重寫程式碼以從文件,然後手動解析整數。這種方法完全避免了 EOF 問題:

ifstream iFile("input.txt");

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

以上是為什麼我的 C 程式碼在檢查 EOF 時會讀取文字檔案的最後一行兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn