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