关于文件流的问题

O湛狼O 2010-05-18 05:07:25
#include <iostream>
#include<time.h>
#include <string>
#include<fstream>

#define FILE "save.dat"
using namespace std;


struct t
{
string name;
long money;
long debt;
int moral;
int health;
int happy;
int day;
int computer,wiretap/*窃听器*/,book;
int ticket/*发票*/,proof/*证件*/,cd;
}me;
void SaveDat(){
ofstream output;
output.open(FILE,ios::out|ios::binary);
output.seekp(0);
output.write((char *)&me.name,sizeof(me.name));
output.write((char *)&me.money,sizeof(long));
output.write((char *)&me.debt,sizeof(long));
output.write((char *)&me.moral,sizeof(int));
output.write((char *)&me.health,sizeof(int));
output.write((char *)&me.day,sizeof(int));
output.write((char *)&me.computer,sizeof(int));
output.write((char *)&me.wiretap,sizeof(int));
output.write((char *)&me.book,sizeof(int));
output.write((char *)&me.ticket,sizeof(int));
output.write((char *)&me.proof,sizeof(int));
output.write((char *)&me.cd,sizeof(int));
output.close();
system("cls");
cout<<"存档成功";
system("pause");
}
int ReadDat(){
ifstream input;
input.open(FILE,ios::in|ios::binary);
if(!input){
cout<<"没有找到存档";
return 0;}

input.open(FILE,ios::in|ios::binary);
input.seekg(0);
input.read((char *)&me.name,sizeof(string));
input.read((char *)&me.money,sizeof(long));
input.read((char *)&me.debt,sizeof(long));
input.read((char *)&me.moral,sizeof(int));
input.read((char *)&me.health,sizeof(int));
input.read((char *)&me.day,sizeof(int));
input.read((char *)&me.computer,sizeof(int));
input.read((char *)&me.wiretap,sizeof(int));
input.read((char *)&me.book,sizeof(int));
input.read((char *)&me.ticket,sizeof(int));
input.read((char *)&me.proof,sizeof(int));
input.read((char *)&me.cd,sizeof(int));
input.close();
system("cls");
cout<<"读档成功";
system("pause");
}
void getData(){
system("cls");
cout<<"姓名:"<<me.name;
cout<<"\n金钱:"<<me.money;
cout<<"\n债务:"<<me.debt;
cout<<"\n道德:"<<me.moral<<"|健康:"<<me.health<<"|快乐:"<<me.happy<<"\n";
system("pause");

}
int main(){
int a;
cin>>a;
cin.ignore();
if(a==1){
getline(cin,me.name);
me.money=5000;
me.debt=3000;
me.happy=100;
me.health=100;
me.moral=100;
SaveDat();
}
if(a==2){
ReadDat();
getData();}
return 0;
}



1、先看ReadDat函数,为什么我读了两次文件内容,结果就读不出东西,输出的全部是0,而去掉一个open,即只读一次后就正常读取了?

int ReadDat(){
ifstream input;
input.open(FILE,ios::in|ios::binary);
if(!input){
cout<<"没有找到存档";
return 0;}

input.open(FILE,ios::in|ios::binary);



2、如果不自己设置文件指针位置,那么默认位置在哪里呢?我的程序都要加个

seekg/seekp(0),之后才能正常读取。



3、上面这个程序的名字为什么读不了?是存的时候出问题,还是读的时候出问题?

求助。

...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowzl 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zyrr159487 的回复:]
打开文件-读文件-关闭文件-打开文件-再次打开,必须先关闭
[/Quote]

还要清除流的状态
weilong8998 2010-05-18
  • 打赏
  • 举报
回复
今天我也有弄文件流的问题
liutengfeigo 2010-05-18
  • 打赏
  • 举报
回复
呵呵,文件流~!
zyrr159487 2010-05-18
  • 打赏
  • 举报
回复
打开文件-读文件-关闭文件-打开文件-再次打开,必须先关闭
wade_2003 2010-05-18
  • 打赏
  • 举报
回复
1.为什么要读两次啊?一次就够了,要读第二次的话先关闭文件再读
2.读文件时指针应该在文件头吧
3.个人觉得这样写不好,#define FILE "save.dat" 因为FILE是个结构体啊
GingerJWS 2010-05-18
  • 打赏
  • 举报
回复
1.不能两次打开

2. 不需要

3.读写string的方式错误
  • 打赏
  • 举报
回复
拒绝0回复...

64,651

社区成员

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

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