c++文件讀取最後一行讀取兩次的問題

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流更好用
點此

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章