gpt4 book ai didi

C++ 文件处理(结构)

转载 作者:太空狗 更新时间:2023-10-29 23:23:51 25 4
gpt4 key购买 nike

以下代码,当使用 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。当 read 无法读取更多数据时,引用将计算为 false,这将阻止它进入循环。

关于C++ 文件处理(结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/440167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com