第14周-閱讀專案4-二進位制檔案和字串流操作的一般方法

kewlgrl發表於2015-06-15
問題及程式碼:

#include<iostream>
#include <fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct student
{
    int num;
    char name[20];
    float score;
};
int main( )
{
    int i;
    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( );
    }
    //(1)向磁碟檔案輸出5個學生的資料並顯示出來
    cout<<"(1)向磁碟檔案輸出5個學生的資料並顯示出來"<<endl;
    for(i=0;i<5;i++)
    {
        iofile.write((char *)&stud[i],sizeof(stud[i]));
        cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
    }

    //(2)將磁碟檔案中的第1,3,5個學生資料讀入程式,並顯示出來;
    cout<<"(2)將磁碟檔案中的第1,3,5個學生資料讀入程式,並顯示出來"<<endl;
    student stud1[5];                  //用來存放從磁碟檔案讀入的資料
    for(i=0;i<5;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;

    //(3) 將第3個學生的資料修改後存回磁碟檔案中的原有位置。
    cout<<"(3)將第3個學生的資料修改後存回磁碟檔案中的原有位置"<<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);                       //重新定位於檔案開頭

    //(4)從磁碟檔案讀入修改後的5個學生的資料並顯示出來。
    cout<<"(4)從磁碟檔案讀入修改後的5個學生的資料並顯示出來"<<endl;
    for(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;
}


執行結果:


知識點總結:
二進位制檔案和字串流操作的一般方法。

學習心得:

真是傷不起,這個程式一執行就破壞了我CB中的的中文字元識別。。

然後我重新調好字符集了再試。。CB又崩潰了。。

(⊙o⊙)…所以我決定不冒險了。。

反正我知道這個程式是個什麼意思了。。

相關文章