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 一個例外。
沒有留言:
張貼留言