问下各位大虾C++知识,为什么会文件会多读一次?搞不懂。

[复制链接]
查看11 | 回复1 | 2011-8-31 20:50:02 | 显示全部楼层 |阅读模式
CNode *pNode;
        CSalary *pSal;
        while(!infile.eof())
        {
                pSal=new CSalary;
                infile.read((char *)pSal,sizeof(CSalary));
                pNode=new CNode;
                pNode->InputData(pSal);
                SalaryList.AddNode(pNode);
        }
        SalaryList.DeleteNode(pNode);//由于文件的关系,多读了一次,所以将首结点删除

回复

使用道具 举报

千问 | 2011-8-31 20:50:02 | 显示全部楼层
eof()返回true时是读到文件结束符0xFF,而文件结束符是最后一个字符的下一个字符,因此,当读到最后一个字符时,程序会多读一次(编译器会让指针停留在最后一个字符那里,然后重复读取一次,这也就是就上面最后一个字符会输出两次的原因。那么这时我们只要用while(fin.peek() != EOF)就可以解决。peek()是文件流中用来读取文件指针下一位置的值,但指针仍然在当前位置而不是跳到一下位置...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行