随机访问2进制文件的问题
程序代码:
/* 有五个学生数据,要求: (1)把它们放到磁盘文件中; (2)把磁盘文件中的第1,3,5个学生的数据读入程序,并显示出来; (3)将第3个学生的数据修改后存回磁盘文件中的原有位置。*/ #include <conio.h> #include <iostream> #include <fstream> using namespace std; struct student { int num; char name[20]; float score; }; int main() {student stud[5]={1001,"LI",58,1002,"Fun",90,1003,"Da",96,1004,"Ma",78,1005,"Sa",98} fstream iofile("stud.dat",ios::in|ios::out|ios::binary); if(!iofile) { cout<<"open error!"<<endl; getch(); exit(1); } for(int i=0;i<5;i++) iofile.write((char*)&stud[i],sizeof(stud[i])); student stud1[5]; for(int i=0;i<5;i=i+2) {iofile seekg(i*sizeof(stud1[i]),ios::beg);//下面的i/2是什么意思,为什么i/2以后就能到stud1中的,1,3,5号? iofile.read((char*)&stud1[i/2],sizeof(stud1[0])); cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl; } cout<<endl; stud2.num=1012; strcpy(stud[2].name,"Wu");//这里一定要用复制函数,strcpy()?用stud[2].name="Wu";为什么不行? stud[2].score=100;//我记得以前看到过原因,现在忘了。。高手指教 iofile.seekp(2*sizeof(stud[0]),ios::beg); iofile.write((char *)&stud[2],sizeof(stud[2])); iofile.seekg(0,ios::beg); for(int i=0;i<5;i++) { iofile.read((char *)&stud1[i],sizeof(stud[i])); cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<" "<<endl; } iofile.close(); getch(); return 0; }