c++文件讀取最後一行讀取兩次的問題
新人博客。
本來記筆記用word,寫博客查閱更方便,資料也不容易丟失還能與人交流,也就轉戰博客了。
在做c++文件流的題目:要求將20個數據從文件中讀取到一個長度爲20的向量中,我本來是這麼寫的:
i=0;
while(in.eof()==false)
{
if(in.bad()==false&&in.fail()==false)
{
in>>A[i];
i++;
}
}
總是報錯:向量的下標超過了範圍。雖然向量是容器可以隨意伸縮但問題出在了文件讀取上。
谷歌一下(搜索引擎真是最好的老師)知道eof()
是讀取文件結束符才結束,程序會以爲未結束導致多讀了一次。
文件最後字符->結束符
有個簡單方法解決:
i=0;
while(in.eof()==false)
{
if(in.bad()==false&&in.fail()==false)
{
in>>A[i];
i++;
}
in.get();//獲取之後一個字符
if (in.peek()==EOF)
break;
}
peek
方法可以返回下一個卻不移動指針
只有文件最後一行是空行纔會出現這種問題。
也可以用istringstream流更好用
點此