m0_63989703 2022-04-13 20:22 采纳率: 87.5%
浏览 548
已结题

c++重载文件流写入txt文件出现乱码

我的目的是用过这段程序分别向一个txt文本写入信息和向另一个txt文本以二进制形式写入信息,但是运行过后两个txt内容一样,有些信息是正确的有些是乱码,应该二进制录入信息的文本中内容和第一个文本一样,代码如下:

#include <iostream>
#include <fstream>
using namespace std;
class Student
{
private:
    char no[10], name[20], sex[10];
    char major[20], phone[20], addr[30];
public:
    friend istream & operator>>(istream &, Student &);
    friend ostream & operator<<(ostream &, Student &);
    void writeTo(char filename[]);
    void readFrom(char filename[]);
    void writeTobinary(char filename[]);
    void readFrombinary(char filename[]);
};
istream & operator>>(istream & input, Student & s)
{
    cout << "输入学生数据:" << endl;
    cout << "学号:";
    input >> s.no;
    cout << "姓名:";
    input >> s.name;
    cout << "性别:";
    input >> s.sex;
    cout << "专业:";
    input >> s.major;
    cout << "电话:";
    input >> s.phone;
    cout << "地址:";
    input >> s.addr;
    return input;
}
ostream & operator<<(ostream & output, Student & s)
{
    output << "输出学生数据:" << endl;
    output << "学号:" << s.no << endl;
    output << "姓名:" << s.name << endl;
    output << "性别:" << s.sex << endl;
    output << "专业:" << s.major << endl;
    output << "电话:" << s.phone << endl;
    output << "地址:" << s.addr << endl;
    return output;
}
void Student::writeTobinary (char filename[])
{
    ofstream outFile;
    outFile.open(filename,ios::binary|ios::out);
    if(!outFile) cerr<<"open error!"<<endl;
    else outFile.write((char *)this, sizeof *this);
    outFile.close();
}
void Student::readFrombinary (char filename[])
{
    ifstream inFile;
    inFile.open(filename,ios::binary|ios::in);
    if(!inFile) cerr<<"open error!"<<endl;
    inFile>>no>>name>>sex>>major>>phone>>addr;
    inFile.close();
}

void Student::writeTo (char filename[])
{
    ofstream outFile;
    outFile.open(filename,ios::out);
    if(!outFile) cerr<<"open error!"<<endl;
    else outFile.write((char *)this, sizeof *this);
    outFile.close();
}
void Student::readFrom (char filename[])
{
    ifstream inFile;
    inFile.open(filename,ios::in);
    if(!inFile) cerr<<"open error!"<<endl;
    inFile>>no>>name>>sex>>major>>phone>>addr;
    inFile.close();
}


int main(int argc, char* argv[])
{
    Student stu1,stu2;
    cin >> stu1;
    stu1.writeTo("D:\\stu1.txt");
    stu1.readFrom("D:\\stu1.txt");
    cout << stu1;

    cin >> stu2;
    stu2.writeTobinary("D:\\stu2.txt");
    stu2.readFrombinary("D:\\stu2.txt");
    cout << stu2;

    return 0;
}


如何解决?

  • 写回答

3条回答 默认 最新

  • 关注

    写文件都是用二进制write,读文件都是用文本 >> 方式,这样输入输出有问题。

    一般文本方式写入用<<,读用>>。二进制写入用write,读取用read。不能混。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题