#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,里面出现了乱码。
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的话,第二个参数不用填,默认文本方式写入,不要使用二进制,否则可能还会出现乱码。(当然,读文件那里也是一样,要保持读和写的模式一致)
如有帮助,请采纳一下,谢谢。
哪个,虽然有"\\"写反了,但是改正测了之后还是错的。
你用二进制写入,用文本编辑器看肯定乱码
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632