![]() |
#2
fangdong652011-05-08 09:34
|

/* 有五个学生数据,要求:
(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;
}
(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;
}