使用fstream 進行檔案輸入操作通常涉及檢查流的狀態以確定何時停止閱讀。但是,使用某些狀態標誌可能會導致意外問題,例如讀取最後一行兩次。本文探討了根本原因並提供了避免此問題的解決方案。
為什麼最後一行被讀取兩次
使用 good() 或 ! 時會出現此問題。使用 getline() 從檔案中讀取行的 while 迴圈內的 eof() 條件。發生這種情況的原因如下:
修正: 使用getline() 的回傳值檢查是否成功讀取行:
while (getline(stream, line)) { // Use line here. }
修補:檢查 getline() 操作是否為在檢查 EOF之前成功:
if (getline(stream, line)) { // Use line here. } else if (stream.eof()) { // Handle end-of-file condition. } else { // Handle error condition. }
最佳實踐
要避免這些問題並有效處理文件行,請考慮以下事項:
if (stream >> foo >> bar) { // Use foo and bar here. } else { // Handle error condition. }
for (string line; getline(stream, line);) { // Use line here. }
遵循這些準則,您可以避免無意中讀取最後一行兩次,並確保可靠的檔案輸入處理fstream。
以上是在 C 中使用'fstream”時如何防止兩次讀取最後一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!