二进制读写的问题

Watermelon_Bigger Watermelon_Bigger 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
调试时,到的这一条语句st.update(age,name);出现错误,恳请各位大侠指出错误。
原意是想更新第一条记录的,可是老出现错误。


#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
class student
{
private:
int age; //年龄
string name; //姓名
public:
student()=default;
student(int a,string n):age(a),name(n){}
void update(int a,string n) //更新学生数据
{
age=a;
name=n;
}
friend ostream& operator<<(ostream &os,student stu) //重载==操作符
{
os<<"age : "<<stu.age<<ends<<"name : "<<stu.name<<endl;
}
};

void print(fstream &f) //打印所有数据
{
f.seekg(0,f.end);
int n=f.tellg()/sizeof(student);
f.seekg(0,f.beg);
student st;
for(int i=0;i<n;i++)
{

f.read((char*)&st,sizeof(student));
cout<<st;
}
}

int main(int argc, char** argv)
{
fstream f("test.dat",ios::in|ios::out|ios::trunc|ios::binary);
if(!f)
{
cerr<<"file can't open!"<<endl;
exit(-1);
}

student st(18,"nobody");
for(int i=0;i<5;i++) //初始化5条记录
{

f.write((char*)&st,sizeof(student));

}

print(f);

int age;string name;
cout<<"input age,name to update"<<endl;
cin>>age>>name;
st.update(age,name);
f.seekg(0*sizeof(student),f.beg);
f.write((char*)&st,sizeof(student));
print(f);



return 0;
}
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
Watermelon_Bigger
新手乐园 33,315 成员 41,769 内容