2010年8月16日

fstream::eof() 不能亂用

最近重新練習 fstream 的用法,用到一半發現eof() 真的不能亂用。

eof() 是用來檢查是否已經超過檔案結尾的函式,但是他不能用來做讀入檔案的判別條件,像下面這樣用是會錯誤的:
while(!fstr.eof()){
fstr>>rand[i];
i++;
}

因為eof() 是用來判別是否超過檔案結尾的函式,所以正常讀檔當讀到eof的時候,結果仍然會是true,就會多讀一次。要讀檔還是要像下面這樣:
while(fstr>>rand[i];){
i++;
}
if (!fstr.eof()) throw std::runtime_error("Invalid data from file");

直接用fstream本身來確定有沒有讀到東西,再用eof() 判別fstr之後是否有無用的資料,有的話就throw 一個例外。

沒有留言:

張貼留言