朱倩倩zqq 2021-06-03 22:02 采纳率: 75%
浏览 24
已结题

关于文件输出,输入流的问题(求大佬解决)

#pragma warning (disable:4996)
#include<iostream>
#include<fstream>
using namespace std;
class student
{
private:
    char name[20];
    long number;
    char bianji[20];
public:
    student(const char *_name="dsf", long _number=122, const  char _bianji[]="dcs") :number(_number)
    {
        strcpy(name, _name);
        strcpy(bianji, _bianji);
    }
    void print()
    {
        cout << "学生姓名:" << name << endl;
        cout << "学生学号:" << number << endl;
        cout << "学生班级:" << bianji << endl;
    }
    void set( char* _name , long _number, char* _bianji)
    {
        strcpy(name, _name);
        number = _number;
        strcpy(bianji, _bianji);

    }
};
int main()
{
    cout << "输入多少学生信息:" << endl;
    int n;
    cin >> n;
    char name[20];
    long number;
    char banji[20];
    student* p = new student[n];
    for (int i = 0; i < n; i++)
    {
        cout << "输入学生姓名:" << endl;
        cin >> name;
        cout << "输入学生学号:" << endl;
        cin >> number;
        cout << "输入学生班级:" << endl;
        cin >> banji;
         p[i].set(name, number, banji);
    }
    ofstream ofile("d://student.dat", ios::out|ios::binary );
    if (!ofile.fail())
    {
        ofile.write((char*)&p, sizeof(p));
    }
    ofile.close();
    ifstream ifile("d:\\student.dat", ios::in|ios::binary);
    student* m = new student[n];
    if (!ifile.fail())
    {
        ifile.read((char*)&m, sizeof(m));
    }
    for (int i = 0; i < n; i++)
    {
        m[i].print();
    }
    ifile.close();
    return 0;
}

注:可以在显示屏上显示出来

但是却无法在文件上显示出来。

点开student.dat,里面出现了乱码。

  • 写回答

4条回答 默认 最新

  • qfl_sdu 2021-06-04 01:12
    关注

    ofile.write((char*)&p, sizeof(p));这里,p是一个指针,sizeof(p)的大小是4,而且,p本身已经是指针了,不用再取地址了,应该改成:

    ofile.write((char*)p, sizeof(n* sizeof(student)));

    还有就是,

    ofstream ofile("d://student.dat", ios::out|ios::binary );这里,如果是写txt的话,第二个参数不用填,默认文本方式写入,不要使用二进制,否则可能还会出现乱码。(当然,读文件那里也是一样,要保持读和写的模式一致)

     

    如有帮助,请采纳一下,谢谢。

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

报告相同问题?

问题事件

  • 系统已结题 9月15日
  • 已采纳回答 9月7日

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿