下面的代码可以编译并成功运行,但是在退出时没有任何写入文件。创建文件后,选择注册时询问所有详细信息并显示消息注册成功。文件为customers.data
空(文件大小为0kb)。该函数write
不会将对象写入文件。代码中的所有内容似乎都是正确的。无法识别错误。请帮忙
主程序:
int main()
{
int ch;
Customer cust;
fstream file;
file.open("customers.data",ios::out|ios::app|ios::binary);
if(!file)
{
cout<<"\nError Files are missing. Unable to create files\n";
system("pause");
exit(1);
}
cout << "WELCOME! Press any key to continue.\n\n";
system("pause");
do
{
system("cls");
cout<<"\n\n\n";
cout<<"1->Login"<<endl;
cout<<"2->Register"<<endl;
cout<<"3->Exit"<<endl;
cout<<"Choose An option: ";
cin>>ch;
switch(ch)
{
case 1:
if(cust.Login()==true)
{
LaunchCustomerMenu();
}
else
{
cout<<"Incorrect Email/Password\n";
system("pause");
}
break;
case 2:
cust.Register();
file.write((char*)&cust, sizeof(cust)); //does not work
if(!file.fail()) //still true
{
cout<<"\n\nRegistration Successful"<<endl;
system("pause");
}
else
{
cout<<"\nTheir was a Error processing your Registration\n";
system("pause");
}
break;
case 3:
exit(0);
break;
default:
cout<<"\n\nWRONG OPTION\n";
cout<<"Choose Again\n\n";
system("pause");
}
cin.ignore();
}
while(ch!=3);
file.close();
return 0;
}
班级:
class Customer
{
private:
unsigned int CustomerID;
string CustomerName;
string CustomerAddress;
string CustomerEmail;
string CustomerPassword;
unsigned int CustomerPhone;
public:
Customer();
void Register();
bool Login();
unsigned int getID();
string getName();
string getEmail();
string readPassword();
unsigned int getPhone();
unsigned int RandomID();
void modifyName();
void modifyAddress();
void modifyEmail();
void modifyPassword();
void modifyPhone();
};
CustomerID
是随机生成的。
功能寄存器:
void Customer::Register()
{
cout<<"Enter Your Name: ";
cin.ignore();
getline(cin,CustomerName);
cout<<"Enter Your Address: ";
cin.ignore();
getline(cin,CustomerAddress);
cout<<"Enter Your Email: ";
cin>>CustomerEmail;
cout<<"Enter A Password: ";
cin.ignore();
getline(cin,CustomerPassword);
cout<<"Enter Your Phone no. :";
cin>>CustomerPhone;
}
编辑:根据下面的答案,我添加了一个检查,file.fail()
但它返回false并且customers.data
为空,即write
操作无法写入对象。
我也发生了同样的事情,我设法找到了错误。
当使用传统char
变量类型声明一个数组来保存字符串值时,它可以很好地工作。
它们似乎与字符串库的实现有关。即使您通过某种方式能够在读取值时使用字符串数据类型将值写入文件,也会产生运行时错误(SIGSEGV)。我认为该字符串使用指针进行动态变量分配,不适合与文件一起使用。运行程序后,分配的变量空间不再保留在内存中,从而生成SIGSEGV。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句