当我运行此代码时,编写时一切正常,但是当我按2进行读取时,一切正常,但是当它完成读取文件(显示功能)时,它弹出一个问题,提示“ 0x5DF9CCC8未处理的异常”休息一下,继续选择。
从我的搜索中,我认为问题出在指向Null的指针上,但是我不知道如何解决。
这是代码
class person{
public :
string name;
int id ;
int age ;
void person :: show();
void person :: add_menue();
void person :: insert_data();
void person :: show_data();
};
person personobject;
void person :: add_menue()
{
cout << "Please Enter Name ID Age :" << endl;
cin >> name >> id >> age ;
}
ofstream file;
void person::show()
{
cout<<"Age => "<<age<<endl;
cout<<"Name => "<<name<<endl;
cout<<"ID => "<<id<<endl;
}
void person :: insert_data()
{
ofstream file;
file.open("binary.dat",ios::app| ios::binary);
personobject.add_menue();
file.write((char*)&personobject, sizeof(personobject));
file.close();
}
void person :: show_data()
{
ifstream file;
file.open("binary.dat",ios::in| ios::binary);
if(!file)
{
cout<<"File not Found";
}
else
{
file.read((char*)&personobject, sizeof(personobject));
while(!file.eof())
{
personobject.show();
cout<<"Press Any Key....For Next Record"<<endl;
getchar();
file.read((char*)&personobject, sizeof(personobject));
}
}
file.close();
}
void main ()
{
int choice;
cout << "1 - to write \n2 - to read" << endl;
cin >> choice;
if (choice==1)
{
person f;
f.insert_data();
}
if (choice==2)
{
person a;
a.show_data();
system ("pause");
}
}
最佳答案
因为您使用的是字符串对象而不是纯字符数组,所以您不能仅将整个类类型转换为char *并将其写入文件(这本身就是一种较差的方法。如果更改,该怎么办?围绕参数的顺序,并尝试加载旧文件?)。
在您的insert_data函数中,单独编写每个变量,而不是强制转换整个类。您可以先写下age和id,然后知道它会占用8个字节,所以剩下的就是名称的大小,可以在read_data函数中将该名称重新加载到字符串对象中。