【发布时间】:2021-06-29 20:12:35
【问题描述】:
#include<fstream>
#include<string.h>
#include<iostream>
using namespace std;
class contact
{
long long ph;
unsigned char name[20],add[50],email[30];
public:
void create_contact()
{
cout<<"Phone: ";
cin>>ph;
cout<<"Name: ";
cin.ignore();
cin>>name;
cout<<"Address: ";
cin.ignore();
cin>>add;
cout<<"Email address: ";
cin.ignore();
cin>>email;
cout<<"\n";
}
void show_contact()
{
cout<<endl<<"Phone Number: "<<ph;
cout<<endl<<"Name: "<<name;
cout<<endl<<"Address: "<<add;
cout<<endl<<"Email Address : "<<email;
}
long long getPhone()
{
return ph;
}
unsigned char* getName()
{
return name;
}
unsigned char* getAddress()
{
return add;
}
unsigned char* getEmail()
{
return email;
}
};
fstream fp;
contact cont;
void save_contact()
{
fp.open("contactBook.txt",ios::out|ios::app);
cont.create_contact();
fp.write((char*)&cont,sizeof(contact));
fp.close();
cout<<endl<<endl<<"Contact Has Been Sucessfully Created...";
getchar();
嘿,我是 C++ 以及这个社区的新手,在我一直在编写的代码中,联系人的电话号码被保存为随机特殊字符。这是我认为出现问题的代码的一半关于如何解决它的任何想法?这会有很大帮助。谢谢!
【问题讨论】:
-
能否包含联系人的定义?答案很可能在那里。那你应该将流作为二进制打开,以避免换行符的有趣问题。
-
如果
contact不是一个简单的struct包含非常简单的数据(没有指针,没有类),那么你就会遇到一些严重的未定义行为。 -
猜谜游戏:电话是一个长整数,您希望它以 ASCII 模式存储为以 10 位为基数的序列。好吧,整数存储在基数 2 中,
write()只是将内存表示放在文件中的变量上。在任何情况下,您都需要提供minimal reproducible example。 -
另外两个搜索词:“序列化”和“内存结构布局”。