我有以下类声明:
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的所有记录。
以下是我的示例输入:
辊:2
商标:20
辊:2
商标:20
辊:2
商标:20
这是我的输出:
记录已删除
辊:0
标记:1
辊:0
标记:1
Roll:0
标记:1
所以我的问题是在删除3号卷的3条记录之后,二进制文件如何保留值。为什么标记的值是1?
感谢您的帮助:)
答案 0 :(得分:3)
您的readrec()函数存在问题
你正在从文件中强行读取三条记录(即使它们不存在)
因此,a.display()显示变量的初始值(因为无法从空文件中读取任何内容)
我认为您需要将readrec()修改为:
while(fin.read((char*)&a,sizeof(a)))
a.display();