C++ C++;:从二进制文件中删除记录
我有以下声明:C++ C++;:从二进制文件中删除记录,c++,C++,我有以下声明: class student { int roll,marks; public: void input() { cout<<"Roll:";cin>>roll; cout<<"Marks:";cin>>marks; } void display() { cout<<
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;
}
};
这是我从文件中读取记录的功能
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();
}
void main()
{
学生a;
writerec();
deleterec(2);
coutreadrec()函数中存在问题
您正在强制读取一个文件中的三条记录(即使它们不存在)
因此,a.display()显示变量的初始值(因为不能从空文件中读取任何内容)
我认为您需要将readrec()修改为:
这些是默认构造函数随机初始化的值;请再次尝试运行代码!当我运行此代码时,会得到垃圾值!首先,什么是student
/如果它是非POD结构,则不能将其作为二进制字节块写入文件。
void main()
{
student a;
writerec();
deleterec(2);
cout<<"Record Deleted\n";
readrec();
}
while(fin.read((char*)&a,sizeof(a)))
a.display();