文件流读取之EOF与Peek

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

#include 
#include 
#include 
using namespace std;
int main()
{
    ifstream fin("test.txt");
    if (!fin.is_open()) cout<<"can't open"<while(!fin.eof())
        {
            char a,b,c;
            fin>>a>>b>>c;
            cout<' '<' 'c<cout<<"it's end"<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<

你可能感兴趣的:(C/C++)