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

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