我正在使用ofstream
使用dev C ++将联系人管理器的对象写入文本文件。我的目标是将对象保存到文本文件中,以便也可以从文本文件中读取名称和电话。以下是我的简单代码:
#include <iostream>
#include <fstream>
#include<string>
using namespace std;
class phone
{
int phone;
string name;
public:void get()
{
cin>>phone;
cin>>name;
}
public:void show()
{
cout<<phone<<"-"<<name;
}
};
int main () {
phone p;
p.get();
p.show();
ofstream outfile("12.txt"); // Open the file in output mode
outfile.write((char*)&p, sizeof(p)); // Write the object into the file
return 0;
}
但是当我打开Text文件时,会显示一些中文字符。有关如何修复的任何帮助吗?
答案 0 :(得分:2)
编写对象会写入对象的二进制表示,但它不会将成员转换为文本。使用:
outfile << p.phone << "-" << p.name << endl;
但是您需要公开这些成员才能使其发挥作用。或者,您可以定义访问它们的公共get_phone
和get_name
函数,并在此处使用它们。
您也可以为您的课程operator<<
重载,有关如何执行此操作的示例,请参阅here。然后你就可以写:
outfile << p;
答案 1 :(得分:0)
您正在混合使用二进制和文本格式。您编写了一个二进制文件,然后尝试将其读取为文本,并且您的文本阅读器将二进制数据解释为奇怪的字符。我建议你坚持使用文本,并修改你的show()
以允许它写入文件:
#include <iostream>
#include <fstream>
#include<string>
using namespace std;
class phone
{
int phone;
string name;
public:
void get()
{
cin>>phone;
cin>>name;
}
void show(ostream &ostr)
{
ostr << phone << "-" << name;
}
};
int main ()
{
phone p;
p.get();
p.show(cout);
ofstream outfile("12.txt"); // Open the file in output mode
p.show(outfile);
return 0;
}
一旦你有了这个工作,就可以进一步改进。
答案 2 :(得分:0)
我重新安排了你的代码,但我已经改变了大部分代码。希望我的解决方案有所帮助。
struct phone
{
int phone;
字符串名称;
}; int main(){
ofstream outfile("12.txt", ios::out); // Open the file in output mode
phone p[1];
cout<<"enter phone first"<<endl;
cin>>p[0].phone;
cin>>p[0].name;
outfile<<p[0].phone<<" - "<<p[0].name<<endl; // Write the object into the file
cout<<p[0].phone<<" - "<<p[0].name<<endl;
outfile.close();
cin.get();
return 0;
}