以下代码在通过g++编译并运行后,
打印两次“1”,而我希望打印“1”
仅一次,因为我将单个结构转储到
文件,但在回读时似乎是
阅读两个结构。为什么?
#include <iostream.h>
#include <fstream.h>
int main(){
struct student
{
int rollNo;
};
struct student stud1;
stud1.rollNo = 1;
ofstream fout;
fout.open("stu1.dat");
fout.write((char*)&stud1,sizeof(stud1));
fout.close();
ifstream filin("stu1.dat");
struct student tmpStu;
while(!filin.eof())
{
filin.read((char*)&tmpStu,sizeof(tmpStu));
cout << tmpStu.rollNo << endl;
}
filin.close();
}
最佳答案
eof
仅在读取失败后设置,因此读取运行两次,第二次,它不会修改缓冲区。
试试这个:
while(filin.read((char*)&tmpStu,sizeof(tmpStu)))
{
cout << tmpStu.rollNo << endl;
}
要么
while(!filin.read((char*)&tmpStu,sizeof(tmpStu)).eof())
{
cout << tmpStu.rollNo << endl;
}
Read在调用时返回对filin的引用,如果流仍然良好,则引用的评估结果为true。当读取操作无法读取更多数据时,引用将评估为false,这将阻止其进入循环。
关于c++ - C++文件处理(结构),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/440167/