Ofstream不会将对象写入文本文件

时间:2015-07-31 11:26:45

标签: c++ file-io

我正在使用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文件时,会显示一些中文字符。有关如何修复的任何帮助吗?

3 个答案:

答案 0 :(得分:2)

编写对象会写入对象的二进制表示,但它不会将成员转换为文本。使用:

outfile << p.phone << "-" << p.name << endl;

但是您需要公开这些成员才能使其发挥作用。或者,您可以定义访问它们的公共get_phoneget_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;

}