C++ fstream多读一行,末尾行重复读取,末尾行读了两次,fstream读取txt出错问题。
最近在用c++的fstream读取txt文件时发现末尾一行会被读取两次,原因好像是因为到达文件末尾时,eof仍然是false,只有继续往下读时才会变成true。
网上看了许多方法无果,无非是改成什么readfile.peek()!=EOF,这里将我的解决方法分享一下
解决方法
在while循环里读取一个,先进行判断是否到文件末尾,到末尾则beak,这样就不会读进去了。
// 读取文件
void readFile(STU stu[])
{
ifstream fin;
n = 0;
fin.open("output.txt");
string stuN,ClassN;
char date[15];
int stuID,ClassX,ClassL;
while (!fin.eof())
{
fin>>date; // 先试着读取一个
if(fin.eof()) // 到达文件末尾则break
break;
fin>>ClassX>>ClassN>>stuN>>stuID>>ClassL;
// 写数据到stu[n]
stu[n++].input(date,ClassX,ClassN,stuN,stuID,ClassL);
}
fin.close();
}