fstream中write和read连续使用的问题

steven396 2014-04-11 10:25:30
文件以out、in、二进制方式打开,先在其中输入4本书的信息,然后将第4本书的信息复制到第5本书的位置,将第3本书的信息复制到第4本书的位置,程序如下,读入第4本书信息,立马在第5本书位置写入是,实际上不会实现这个写入操作,而加入注释掉的那句之后,程序一切正常,求问各位大侠,这是为什么?万分感谢,新人没多少分,各位见谅
struct book
{
char name[20];
char no[10];
float price;
int num;
};
fstream flib("data.dat",ios::in|ios::out|ios::binary);
if (!flib)
{
cout<<"can not open"<<" data"<<endl;
exit(1);
}
book temp;
for (int i=0;i<4;i++)
{
cin>>temp.name>>temp.no>>temp.num>>temp.price;
flib.write((char*) &temp,sizeof(book));
}
for (int j=3;j>1;j--)
{
flib.seekg(j*sizeof(book),ios::beg);
flib.read((char*) &temp,sizeof(book));
//flib.seekg((j+1)*sizeof(book),ios::beg);
flib.write((char*) &temp,sizeof(book));
int k4 = flib.tellg();
cout<<k4<<endl;
cout<<temp.name<<endl;
}
flib.seekg(0,ios::beg);
for (int t=0;t<=4;t++)
{
flib.read((char*) &temp,sizeof(book));
cout<<temp.name<<'\t'<<temp.no<<'\t'<<temp.num<<'\t'<<temp.price<<endl;
}
...全文
538 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuankuan_qiao 2014-04-14
  • 打赏
  • 举报
回复
引用 6 楼 steven396 的回复:
[quote=引用 5 楼 WUYUAN2011WOAINI 的回复:]
测试结果
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
200
4
160
3
1       1       1       1
2       2       2       2
3       3       3       3
3       3       3       3
4       4       4       4
请按任意键继续. . .
文件流使用完记得关闭
就是要实现这样的结果,请问你程序里是怎么实现的?[/quote] 我就用你程序运行了一下 啊 没有问题呀
steven396 2014-04-11
  • 打赏
  • 举报
回复
引用 5 楼 WUYUAN2011WOAINI 的回复:
测试结果
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
200
4
160
3
1       1       1       1
2       2       2       2
3       3       3       3
3       3       3       3
4       4       4       4
请按任意键继续. . .
文件流使用完记得关闭
就是要实现这样的结果,请问你程序里是怎么实现的?
kuankuan_qiao 2014-04-11
  • 打赏
  • 举报
回复
测试结果
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
200
4
160
3
1       1       1       1
2       2       2       2
3       3       3       3
3       3       3       3
4       4       4       4
请按任意键继续. . .
文件流使用完记得关闭
kuankuan_qiao 2014-04-11
  • 打赏
  • 举报
回复
为什么不对呐 哪不对啊
steven396 2014-04-11
  • 打赏
  • 举报
回复
引用 2 楼 supermegaboy 的回复:
[quote=引用 楼主 steven396 的回复:] 文件以out、in、二进制方式打开,先在其中输入4本书的信息,然后将第4本书的信息复制到第5本书的位置,将第3本书的信息复制到第4本书的位置,程序如下,读入第4本书信息,立马在第5本书位置写入是,实际上不会实现这个写入操作,而加入注释掉的那句之后,程序一切正常,求问各位大侠,这是为什么?万分感谢,新人没多少分,各位见谅 struct book { char name[20]; char no[10]; float price; int num; }; fstream flib("data.dat",ios::in|ios::out|ios::binary); if (!flib) { cout<<"can not open"<<" data"<<endl; exit(1); } book temp; for (int i=0;i<4;i++) { cin>>temp.name>>temp.no>>temp.num>>temp.price; flib.write((char*) &temp,sizeof(book)); } for (int j=3;j>1;j--) { flib.seekg(j*sizeof(book),ios::beg); flib.read((char*) &temp,sizeof(book)); //flib.seekg((j+1)*sizeof(book),ios::beg); flib.write((char*) &temp,sizeof(book)); int k4 = flib.tellg(); cout<<k4<<endl; cout<<temp.name<<endl; } flib.seekg(0,ios::beg); for (int t=0;t<=4;t++) { flib.read((char*) &temp,sizeof(book)); cout<<temp.name<<'\t'<<temp.no<<'\t'<<temp.num<<'\t'<<temp.price<<endl; }
C/C++流是不能进行连续的读写操作的,读和写之间需要进行刷新,刷新方法有很多种,例如flush,或者移动写入指针等,你注释掉的那句就起到了刷新的作用。[/quote] 十分感谢,还想请问下,要是用flush刷新的话,应该怎么写? 将注释的那句写成flib.flush();吗
飞天御剑流 2014-04-11
  • 打赏
  • 举报
回复
引用 楼主 steven396 的回复:
文件以out、in、二进制方式打开,先在其中输入4本书的信息,然后将第4本书的信息复制到第5本书的位置,将第3本书的信息复制到第4本书的位置,程序如下,读入第4本书信息,立马在第5本书位置写入是,实际上不会实现这个写入操作,而加入注释掉的那句之后,程序一切正常,求问各位大侠,这是为什么?万分感谢,新人没多少分,各位见谅 struct book { char name[20]; char no[10]; float price; int num; }; fstream flib("data.dat",ios::in|ios::out|ios::binary); if (!flib) { cout<<"can not open"<<" data"<<endl; exit(1); } book temp; for (int i=0;i<4;i++) { cin>>temp.name>>temp.no>>temp.num>>temp.price; flib.write((char*) &temp,sizeof(book)); } for (int j=3;j>1;j--) { flib.seekg(j*sizeof(book),ios::beg); flib.read((char*) &temp,sizeof(book)); //flib.seekg((j+1)*sizeof(book),ios::beg); flib.write((char*) &temp,sizeof(book)); int k4 = flib.tellg(); cout<<k4<<endl; cout<<temp.name<<endl; } flib.seekg(0,ios::beg); for (int t=0;t<=4;t++) { flib.read((char*) &temp,sizeof(book)); cout<<temp.name<<'\t'<<temp.no<<'\t'<<temp.num<<'\t'<<temp.price<<endl; }
C/C++流是不能进行连续的读写操作的,读和写之间需要进行刷新,刷新方法有很多种,例如flush,或者移动写入指针等,你注释掉的那句就起到了刷新的作用。
www_adintr_com 2014-04-11
  • 打赏
  • 举报
回复
操作写入的指针要用 seekp, seekg 只是表示读取的指针, p, g 分别表示 put, get 的意思

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧