gpt4 book ai didi

C++ : Deleting records from binary file

转载 作者:太空狗 更新时间:2023-10-29 21:18:14 26 4
gpt4 key购买 nike

我有以下类声明:

class student
{
int roll,marks;
public:
void input()
{
cout<<"Roll:";cin>>roll;
cout<<"Marks:";cin>>marks;
}
void display()
{
cout<<"Roll:"<<roll<<endl;
cout<<"Marks:"<<marks<<endl;
}
int retroll()
{
return roll;
}
};

我在二进制文件中存储了 3 条 student 类型的记录

void writerec()
{
student a;
ofstream fout ("student.dat",ios::binary);
for (int x = 1 ; x<=3 ; x++)
{
a.input();
fout.write((char*)&a,sizeof(a));
}
}

这是我从文件中读取记录的函数

void readrec()
{
student a;
ifstream fin ("student.dat",ios::binary);
for (int x = 1 ; x<=3 ; x++)
{
fin.read((char*)&a,sizeof(a));
a.display();
}
}

这是我从文件中删除记录的函数

void deleterec(int r) //takes roll number that needs to be deleted 
{
student a;
ofstream fout ("temp.dat",ios::binary);
ifstream fin ("student.dat",ios::binary);
while(fin.read((char*)&a,sizeof(a)))
if(a.retroll()!=r)
fout.write((char*)&a,sizeof(a));
fin.close();
fout.close();
remove("student.dat");
rename("temp.dat","student.dat");
}

这是我的主要功能:

void main()
{
student a;
writerec();
deleterec(2);
cout<<"Record Deleted\n";
readrec();
}

所以我要删除卷号为 2 的所有记录。

这是我的示例输入:

Roll:2

Marks:20

Roll:2

Marks:20

Roll:2

Marks:20

这是我的输出:

Record Deleted

Roll:0

Marks:1

Roll:0

Marks:1

Roll:0

Marks:1

所以我的问题是删除卷号为 2 的 3 条记录后,二进制文件如何仍然保留值。还有为什么marks的值为1?

感谢您的帮助:)

最佳答案

你的readrec()函数有问题

你正在从一个文件中强制读取三个记录(即使它们不存在)

因此,a.display() 显示变量的初始值(因为无法从空文件中读取任何内容)

我认为您需要将 readrec() 修改为:

 while(fin.read((char*)&a,sizeof(a)))
a.display();

关于C++ : Deleting records from binary file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30541833/

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