朱倩倩zqq
2021-06-03 22:02
采纳率: 85.7%
浏览 21

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

#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的话,第二个参数不用填,默认文本方式写入,不要使用二进制,否则可能还会出现乱码。(当然,读文件那里也是一样,要保持读和写的模式一致)

     

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

    已采纳该答案
    打赏 评论
  • 朱倩倩zqq 2021-06-03 22:05

    哪个,虽然有"\\"写反了,但是改正测了之后还是错的。

    打赏 评论
  • 快乐鹦鹉 2021-06-03 22:18

    你用二进制写入,用文本编辑器看肯定乱码

    打赏 评论
  • 有问必答小助手 2021-06-04 09:48

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    打赏 评论

相关推荐 更多相似问题