1. 程式人生 > >C語言:多種方式將結構體存放到檔案中

C語言:多種方式將結構體存放到檔案中

第一種方法:使用格式化讀寫文字檔案

#include<stdio.h>
#include<stdlib.h>

//主要功能:將特定結構寫入檔案,和檔案讀取
#define SIZE 2
//定義員工結構
struct Student
{
        char name[30];  //姓名
        char department[30]; //部門
        float base_pay;  //基本工資
        float allowance;  //月工資
        float total;
       
}*pa,*pb;


int main(){
        //結構體陣列
        int i=0;
        //檔案
		struct Student stu[SIZE];
        FILE *fp;
        pa = stu;
        pb = stu;
        fp = fopen("C:\\Users\\32239\\Desktop\\student.txt","wt+");
        if(fp==NULL){
                printf("error!\n");
                exit(0);
        }
        printf("please input name/department/base_pay/allowance:\n");
        for(i= 0; i< SIZE; i++,pa++){
                scanf("%s %s %f %f",pa->name,pa->department,&pa->base_pay,&pa->allowance);

              //將資料讀到檔案中
                pa->total = pa->base_pay + pa->allowance;
                fprintf(fp,"%s %s %f %f %f\n",pa->name,pa->department,pa->base_pay,pa->allowance,pa->total);
               
        }
        
        rewind(fp);
        for(i= 0; i< SIZE; i++,pb++){
                fscanf(fp,"%s %s %f %f %f\n",pb->name,pb->department,&pb->base_pay,&pb->allowance,&pb->total);
		        pb->base_pay += 100;
				pb->total = pb->base_pay + pb->allowance;
                printf("%s,%s ,%f ,%f ,%f\n",pb->name,pb->department,pb->base_pay,pb->allowance,pb->total);

        }

        fclose(fp);
        return 0;
        

        //將檔案資料輸出

}
#include<stdio.h>
#include<stdlib.h>

//主要功能:將特定結構寫入檔案,和檔案讀取
#define SIZE 2
//定義員工結構
struct Student
{
        char name[30];  //姓名
        char department[30]; //部門
        float base_pay;  //基本工資
        float allowance;  //月工資
        float total;
       
};


int main(){
        //結構體陣列
        int i=0;
        //檔案
	struct Student stu[SIZE];
        FILE *fp;

        fp = fopen("C:\\Users\\32239\\Desktop\\student.txt","wt+");
        if(fp==NULL){
                printf("error!\n");
                exit(0);
        }
        printf("please input name/department/base_pay/allowance:\n");
        for(i= 0; i< SIZE; i++){
                scanf("%s %s %f %f",stu[i].name,stu[i].department,&stu[i].base_pay,&stu[i].allowance);

              //將資料讀到檔案中
                stu[i].total = stu[i].base_pay + stu[i].allowance;
                fputs(&stu[i],fp);
                //fprintf(fp,"%s %s %f %f %f\n",stu[i].name,stu[i].department,stu[i].base_pay,stu[i].allowance,stu[i].total);
               
        }
        
        rewind(fp);
        for(i= 0; i< SIZE; i++){
                fgets(&stu[i],sizeof(Student),fp);
                //fscanf(fp,"%s %s %f %f %f\n",stu[i].name,stu[i].department,&stu[i].base_pay,&stu[i].allowance,&stu[i].total);
                stu[i].base_pay += 100;
                stu[i].total =stu[i].base_pay + stu[i].allowance;
                printf("%s,%s ,%f ,%f ,%f\n",stu[i].name,stu[i].department,stu[i].base_pay,stu[i].allowance,stu[i].total);

        }

        fclose(fp);
        return 0;
        

        //將檔案資料輸出

}

總結:最好使用格式化讀寫結構體資料,fgets不行,不能保證裡面沒有控制符

第二種:使用資料塊讀寫二進位制檔案,不用編碼,直接以二進位制存取,不過開啟不可讀

#include<stdio.h>
#include<stdlib.h>

//主要功能:將特定結構寫入檔案,和檔案讀取
#define SIZE 2
//定義員工結構
#define LENGHT sizeof(struct Student)
struct Student
{
        char name[30];  //姓名
        char department[30]; //部門
        float base_pay;  //基本工資
        float allowance;  //月工資
        float total;
       
};


int main(){
        //結構體陣列
        int i=0;
        //檔案
	struct Student stu[SIZE];
        FILE *fp;

        fp = fopen("C:\\Users\\32239\\Desktop\\student.txt","wb+");
        if(fp==NULL){
                printf("error!\n");
                exit(0);
        }
        printf("please input name/department/base_pay/allowance:\n");
        for(i= 0; i< SIZE; i++){
                scanf("%s %s %f %f",stu[i].name,stu[i].department,&stu[i].base_pay,&stu[i].allowance);

              //將資料讀到檔案中
                stu[i].total = stu[i].base_pay + stu[i].allowance;
                if((fwrite(&stu[i], LENGHT,1,fp)) != 1){
					exit(0);
				}
                //fprintf(fp,"%s %s %f %f %f\n",stu[i].name,stu[i].department,stu[i].base_pay,stu[i].allowance,stu[i].total);
               
        }
        
        rewind(fp);
        for(i= 0; i< SIZE; i++){
			
                fread(&stu[i],LENGHT,1,fp);
                //fscanf(fp,"%s %s %f %f %f\n",stu[i].name,stu[i].department,&stu[i].base_pay,&stu[i].allowance,&stu[i].total);
                stu[i].base_pay += 100;
                stu[i].total =stu[i].base_pay + stu[i].allowance;
				 printf("%s,%s ,%f ,%f ,%f\n",stu[i].name,stu[i].department,stu[i].base_pay,stu[i].allowance,stu[i].total);

               
        }

        fclose(fp);
        return 0;
        

        //將檔案資料輸出

}

結果:

相關推薦

C語言:多種方式結構存放檔案

第一種方法:使用格式化讀寫文字檔案 #include<stdio.h> #include<stdlib.h&

c語言部落格作業--結構&檔案

1.本章學習總結 1.1思維導圖 1.2.本章學習體會 2.大作業 主要功能: 1位數的一步加減乘除計算 2位數的2步加減運算 3位數的2步加減運算 檢視排名 退出 擴充套件功能: 1.進入選單介面前,需要先輸入使用者名稱、密碼,匹配正確才能進入系統刷題。本功能主要讀賬號檔案user.txt

c語言 利用聯合和結構IP地址進行列印

       在每一個計算機中都有他自己的IP地址,而IP地址是如何在計算機中儲存的是一直以來我們都不知道的。        在計算機中,IP地址的存放是由10進位制陣列組成的,而計算機將IP地址呈現給我們時則是以點

C語言:constkeyword、結構

data con post -s 標簽 初始化 weight 什麽 聯系 前幾節內容的解說,主要是內存地址及指針的分析。這一節解說一下easy混淆的keywordconstant及結構體的知識。 一、constkeyword 1. 字符常量的指針 char const

C語言博客作業--結構

自增 規律 統一 body 語句 學生 http clas fin 一、PTA實驗作業 題目1:按等級統計學生成績 1. 本題PTA提交列表 2. 設計思路 for i=0 to i=n 如果分數大於等於85,就讓grade為A 如果分數大於等於75,就讓

C語言(三)- 結構

strong 變量初始化 add num ID name oid nbsp clu 一、結構體 1、一般形式 不同類型數據組成的組合型數據結構,即結構體。 結構體類型的一般形式: 1 struct 結構體名{ 2 類型名 成員名1; 3 類型名 成員名2; 4 類型名

C語言第8課——結構

結構體 C 陣列允許定義可儲存相同型別資料項的變數,結構是 C 程式設計中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。 假設想要跟蹤圖書館中書本的動態,需要跟蹤每本書的下列屬性: Title Author Subject Book ID

C語言-含有指標的結構淺拷貝注意事項

淺拷貝指標覆蓋問題。 下邊程式碼包含: 1,結構體CHSYS_AV_DecParam 2,CHSYS_AV_DecParam的變數m_paramDec 3,函式Create 有兩點需要注意: 第一:判斷if (pParam != &m_paramDec)如果不進行判斷

C語言簡單入門之結構和連結串列

C語言的連結串列也是一個很重要很難啃的骨頭,我是這麼覺得的! 以下只是個人對連結串列的總結和記錄方便日後複習所用,如有錯誤,請留言狠批,謝謝! 先說下連結串列的簡單實現:  如上圖,我們定義一個結構體: 1,2,3,4,5是結構體資料。a,b,c,d,e則是指標變

C語言再學習7-結構

為什麼使用結構體? struct My { char name[20] = "如風斬嶽"; int age; char addr[50] ; int money; double Coordinates; //..... }; 當我們有這樣一種需求,

c語言:通過指向結構變數的指標變數輸出結構變數成員的資訊

通過指向結構體變數的指標變數輸出結構體變數中成員的資訊。解:程式:#include<stdio.h>#include<string.h>int main(){struct Stu

c語言基礎語法六——結構(完結)

1;關於c語言結構體的引入; 在前面已經介紹了整形(int,long,….),浮點型(flaot,double),字元型(char),還介紹了陣列(儲存一組具有相同型別的資料),字串。但是在實際問題中只有這些資料型別是不夠的,有時候我們需要其中的幾種一起來修飾

C語言 一個例子說明結構變數,結構陣列和結構指標

輸入三個學生的個人資訊 包含學號 姓名和三門學科的成績 輸出平均成績最高的學生的學號 姓名 各科成績以及平均成績 程式碼如下(譚浩強c程式設計的例子) #include<stdio.h> struct Student {int num;

ACMNO.43 C語言-成績排序 利用結構解決,是一個進步啦!

題目描述 現有有N個學生的資料記錄,每個記錄包括學號、姓名、三科成績。 編寫一個函式input,用來輸入一個學生的資料記錄。 編寫一個函式print,列印一個學生的資料記錄。 在主函式呼叫這兩個函式,讀取N條記錄輸入,再按要求輸出。 N<100 輸入 學生數量N佔

c語言----定義和使用結構變數

1.結構體型別 由於一個數組中只能存放同一種類型的資料,很不方便,所以C語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,也就是結構體,通俗講就像是打包封裝,把一些有共同特徵(比如同屬於某一類事物的屬性,往往是某種業務相關屬性的聚合)的變數封裝在內部,通過一定方法

C語言基礎五(結構

結構體 結構體是一種資料結構. 陣列也是一種資料結構,但是陣列存放的資料型別比較單一,結構體解決了數組裡不能存放 多種型別資料 的這種缺陷。 結構體宣告,定義 //宣告 struct infor // struct infor 是識別符號,

C語言知識點學習之結構成員變數後加冒號

typedef struct xx {        unsigned int a:2;      unsigned int b:3; }Xx; //“unsigned int a:2;“中後面的":2"表示成員a只佔倆個位,而不是我們傳統認為的佔 //4個位元組這樣整個結構體大小就為4個位元組而不是8

C語言 複合資料型別(結構 共用 列舉)

我們在前邊學資料型別的時候,主要是字元型、整型、浮點型等基本型別,而學陣列的時候,陣列的定義要求陣列元素必須是相同的資料型別。在實際應用中,有時候還需要把不同型別的資料組成一個有機的整體來處理,這些組合在一個整體中的資料之間還有一定的聯絡,比如一個學生的姓名、性

結構數組內容以文件形式的導出

res tac () end hda str phone nta 結構 void fileOutput(contacts student[] , int n){   ofstream out ;   out . open("tongxunlu-new.txt") ;   f

C部落格作業06--結構&檔案

1.本章學習總結 1.1思維導圖 1.2本章學習體會 學習了結構和檔案,又是懵懵的課了,我的天啊。結構還好,題目集一出就做了,不是很難,感覺掌握的還可以,不過這只是感覺而已,等到真正來寫大作業的時候又懵掉了。還有檔案,每次老師講完課都想著回去自己打一下程式碼感受一下,然而我現在還沒感受,這麼飄的自