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();