從文字檔案讀取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中文網其他相關文章!