文件流读取之EOF与Peek

来源:互联网 发布:php网教视频网站源码 编辑:程序博客网 时间:2024/06/04 15:13

今天,遇到了一个蛮奇怪的问题,为啥ifstream::eof()的运用往往跟预期不符合?
比如,下面这段code:

#include <iostream>#include <fstream>#include <stdio.h>using namespace std;int main(){    ifstream fin("test.txt");    if (!fin.is_open()) cout<<"can't open"<<endl;    while(!fin.eof())        {            char a,b,c;            fin>>a>>b>>c;            cout<<a<<' '<<b<<' 'c<<endl;        }    cout<<"it's end"<<endl;    return 0;}

这里,test.txt文件共有两行,分别是”a b c”,”d e f”,但是程序输出将会多输出第二行一次:

a b c
d e f
d e f
it’s end

这是为啥呢?其实eof()函数,本质上就是返回eofbit的状态,当我们文件读取至最后的数据时,eofbit仍然为false,直到我们已经到文件结尾却尝试读取数据时,eofbit才会被设置为true。

解决办法,我们一般使用peek()查看是否已经到达文件结尾。

如:
while(fin.peek()!=EOF)
{
char a,b,c;
fin>>a>>b>>c;
cout<

0 0
原创粉丝点击