请教一个关于宿舍管理系统的问题(C++)

来源:百度知道 编辑:UC知道 时间:2024/09/24 22:18:11
其中一个添加数据的函数
void Add()
{
fstream iofile;
//建立一个二进制文件
iofile.open("student.dat",ios::app|ios::binary);

if(!iofile)
{
cerr<<"file open error!"<<endl;
return;
}
list<student> stulist;
student stu;
int stunum;
for(int i=1;i<=stunum;i++)
{
cout<<"请输入您要添加的学生信息个数!"<<'\t';
cin>>stunum;
cout<<"请输入第"<<i<<"个学生的信息:"<<endl;
cout<<"姓名:";
cin>>stu.name;
cout<<"学号:";
cin>>stu.num;
cout<<"房号:";
cin>>stu.roomnum;
stulist.push_back(stu);
iofile.write((char *)&stu,sizeof(stu));//将学生信息写入文件
}
iofile.close();
}
运行时,一旦调用这个函数就是file open error! 哪位大侠知道为什么,谢谢了
没有这个文件,这个函数也可以创建这个文件,抱着死马当活马医的想法,在debug文件夹里创

调了n次,上网查了n多资料,最后发现

fstream用ios::app|ios::binary时会报错

把fstream改为用ofstream就可以了

至于楼上的,又查了一下资料,确定可行:
fstream流,默认是ios::in,所以如果没有文件,ios::app和ios::ate都是失败,
以ios::app|ios::out,如果没有文件则创建文件,如果有文件,则在文件尾追加
以ios::ate|ios::out打开,如果没有文件则创建文件,如果有,则清空文件。
以ios::ate|ios::out|ios::in打开,如果没有文件,则打开失败,有文件则定位到文件尾

在编辑器里调试代码的时候 当前路径是在 代码文件路径
你把student.dat放在代码文件同一路径试试

iofile.open("student.dat",ios::app|ios::binary|ios::out);//改成这样
你很酷的使用了 app binary 但是 很简单的问题 使用它们的前提是 你要建立 一个 已经存在的 student .dat 文件 怎么建 再加一个 ios::out(多了不说了)
期望你的分数呵呵

把整源代码发给我,我帮你调试