簡體   English   中英

讀取文件的輸入循環

[英]An input loop for reading a file

我是編程的初學者,我需要本書中提供的這段代碼幫助。

for (My_type var; ist >> var;) { // read until end of file 
// maybe check that var is valid 
// do something with var

}

if (ist.fail()) {
ist.clear(); 
char ch; 
// the error function is created into the book : 
if (!(ist >> ch && ch == '|')) error("Bad termination of input\n"); 

}
// carry on : we found end of file or terminator

這個例子是關於從文件中讀取值的。 我嘗試使用此功能,但是在理解其工作方式時遇到了一些麻煩:

  1. 如果我在循環后嘗試測試流狀態,我會同時獲得eof狀態和fail狀態,那么可能性如何? 如何避免同時觸發faileof

  2. EOF何時准確觸發? 從我的測試來看,當我到達序列的最后一個值時似乎觸發了該定義,對嗎?

謝謝。

如果我在循環后嘗試測試流狀態,我會同時獲得eof狀態和失敗狀態,那么可能性如何? 如何避免同時觸發失敗和eof?

可能存在無法轉換為My_type字符,並且該字符是文件中的最后一個字符。 然后,將設置failbiteofbit

EOF何時准確觸發? 從我的測試來看,當我到達序列的最后一個值時似乎觸發了該定義,對嗎?

是的,讀取最后一個字符時會設置eofbit

std::basic_istream引用:

如果滿足以下條件之一,提取將停止:

  • 文件結束出現在輸入序列上;

  • 在輸出序列中插入失敗(在這種情況下,不會提取要插入的字符);

  • 發生異常(在這種情況下,將捕獲異常,並且只有在exceptions()中啟用了故障位時才重新拋出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM