?? 例13.16.txt
字號:
例13.16 有5個學生的數據,要求:
(1) 把它們存到磁盤文件中;
(2) 將磁盤文件中的第1,3,5個學生數據讀入程序,并顯示出來;
(3) 將第3個學生的數據修改后存回磁盤文件中的原有位置。
(4) 從磁盤文件讀入修改后的5個學生的數據并顯示出來。
#include <fstream>
using namespace std;
struct student
{int num;
char name[20];
float score;
};
int main( )
{student stud[5]={1001,″Li″,85,1002,″Fun″,97.5,1004,″Wang″,54,
1006,″Tan″,76.5,1010,″ling″,96};
fstream iofile(″stud.dat″,ios::in|ios::out|ios::binary);
//用fstream類定義輸入輸出二進制文件流對象iofile
if(!iofile)
{cerr<<″open error!″<<endl;
abort( );
}
for(int i=0;i<5;i++)//向磁盤文件輸出5個學生的數據
iofile.write((char *)&stud[i],sizeof(stud[i]));
student stud1[5]; //用來存放從磁盤文件讀入的數據
for(int i=0;i<5;i=i+2)
{iofile.seekg(i*sizeof(stud[i]),ios::beg); //定位于第0,2,4學生數據開頭
iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));
//先后讀入3個學生的數據,存放在stud1[0],stud[1]和stud[2]中
cout<<stud1[i/2].num<<″ ″<<stud1[i/2].name<<″ ″<<stud1[i/2].score<<endl;
//輸出stud1[0],stud[1]和stud[2]各成員的值
}
cout<<endl;
stud[2].num=1012; //修改第3個學生(序號為2)的數據
strcpy(stud[2].name,″Wu″);
stud[2].score=60;
iofile.seekp(2*sizeof(stud[0]),ios::beg); //定位于第3個學生數據的開頭
iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3個學生數據
iofile.seekg(0,ios::beg); //重新定位于文件開頭
for(int i=0;i<5;i++)
{iofile.read((char *)&stud[i],sizeof(stud[i])); //讀入5個學生的數據
cout<<stud[i].num<<″ ″<<stud[i].name<<″ ″<<stud[i].score<<endl;
}
iofile.close( );
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -