关于二进制文件读写问题,实在搞不明白啊。。。。
#include<iostream>
#include<fstream>
using namespace std;
class StudentBase
{
public:
long mNum;
char mName[20];
int mSex;
int mAge;
char mAddr[30];
StudentBase();
void readBase();
void prinfBase(int num);
void writeBase();
};
StudentBase student[5];
StudentBase::StudentBase(){}
void StudentBase::readBase()
{
fstream input;
input.open("BaseFile.dat",ios::in|ios::binary);
for(int i=0;i<12&&!input.eof();i++)
{
input.read(reinterpret_cast<char *>(&student[i].mNum),sizeof(mNum));
input.read(student[i].mName,sizeof(mName));
input.read(reinterpret_cast<char *>(&student[i].mSex),sizeof(mSex));
input.read(reinterpret_cast<char *>(&student[i].mAge),sizeof(mAge));
input.read(student[i].mAddr,sizeof(mAddr));
i++;
}
input.close();
}
void StudentBase::writeBase()
{
fstream output;
output.open("BaseFile.dat",ios::out|ios::binary);
for(int i=0;i<12;i++)
{
output.write(reinterpret_cast<char *>(&student[i].mNum),sizeof(mNum));
output.write(student[i].mName,sizeof(mName));
output.write(reinterpret_cast<char *>(&student[i].mSex),sizeof(mSex));
output.write(reinterpret_cast<char *>(&student[i].mAge),sizeof(mAge));
output.write(student[i].mAddr,sizeof(mAddr));
i++;
}
output.close();
}
void StudentBase::prinfBase(int num)
{
cout<<student[num-1].mNum<<" "<<student[num-1].mName<<" "
<<student[num-1].mSex<<" "<<student[num-1].mAge<<" "<<student[num-1].mAddr<<endl;
}
int main()
{
StudentBase stu;
for(int i=0;i<5;i++)
{
cin>>student[i].mNum>>student[i].mName>>student[i].mSex>>
student[i].mAge>>student[i].mAddr;
}
stu.writeBase();
for(int i=0;i<5;i++)
stu.prinfBase(i);
return 0;
}
int main()
{
StudentBase stu;
stu.readBase();
for(int i=0;i<5;i++)
stu.prinfBase(i);
return 0;
}
[解决办法]
还有你的write和read函数不用那么写啊 i++两次是什么意思?
for(int i=0;i<5&&!(input.peek()==EOF);i++)
{
input.read((char*)(&student[i]),sizeof(StudentBase));
}
for(int i=0;i<5;i++)
{
output.write((char*)(&student[i]),sizeof(StudentBase));
}
#include<iostream>
#include<fstream>
using namespace std;
class StudentBase
{
public:
long mNum;
char mName[20];
int mSex;
int mAge;
char mAddr[30];
StudentBase();
void readBase();
void prinfBase(int num);
void writeBase();
};
StudentBase student[5];
StudentBase::StudentBase(){}
void StudentBase::readBase()
{
fstream input;
input.open("BaseFile.dat",ios::in
[解决办法]
ios::binary);
for(int i = 0;i < 5 && !input.eof(); i++)
{
input.read(reinterpret_cast<char *>(&student[i].mNum), sizeof(mNum));
input.read(student[i].mName,sizeof(mName));
input.read(reinterpret_cast<char *>(&student[i].mSex), sizeof(mSex));
//input.read(student[i].mSex, sizeof(mSex));
input.read(reinterpret_cast<char *>(&student[i].mAge),sizeof(mAge));
input.read(student[i].mAddr,sizeof(mAddr));
}
input.close();
}
void StudentBase::writeBase()
{
fstream output;
output.open("BaseFile.dat",ios::out
------解决方案--------------------
ios::binary);
for(int i = 0; i < 5; i++)
{
output.write(reinterpret_cast<char *>(&student[i].mNum),sizeof(mNum));
output.write(student[i].mName,sizeof(mName));
output.write(reinterpret_cast<char *>(&student[i].mSex),sizeof(mSex));
output.write(reinterpret_cast<char *>(&student[i].mAge),sizeof(mAge));
output.write(student[i].mAddr,sizeof(mAddr));
}
output.close();
}
void StudentBase::prinfBase(int num)
{
cout<<student[num].mNum<<" "<<student[num].mName<<" "
<<student[num].mSex<<" "<<student[num].mAge<<" "<<student[num].mAddr<<endl;
}
int main(void)
{
StudentBase stu;
stu.readBase();
for(int i = 0; i < 5; i++)
{
stu.prinfBase(i);
}
return 0;
}
/*
int main(void)
{
StudentBase stu;
for(int i=0; i<5; i++)
{
cin>>student[i].mNum>>student[i].mName>>student[i].mSex>>
student[i].mAge>>student[i].mAddr;
}
stu.writeBase();
for(int i = 0; i < 5; i++)
{
stu.prinfBase(i);
}
return 0;
}
*/