关于文件流的问题
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、上面这个程序的名字为什么读不了?是存的时候出问题,还是读的时候出问题?
求助。