C語言以數據塊的形式讀寫文件實例代碼
大家知道C語言怎麼以數據塊的形式讀寫文件嗎?下面小編為大家整理了C語言以數據塊的形式讀寫文件實例代碼,希望能幫到大家!
fgets() 有侷限性,每次最多隻能從文件中讀取一行內容,因為 fgets 遇到換行符就結束讀取。如果希望讀取多行內容,需要使用 fread 函數;相應地寫入函數為 fwrite。
fread() 函數用來從指定文件中讀取塊數據。所謂塊數據,也就是若干個字節的數據,可以是一個字符,可以是一個字符串,可以是多行數據,並沒有什麼限制。fread() 的原型為:
size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );
fwrite() 函數用來向文件中寫入塊數據,它的原型為:
size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );
對參數的説明:
ptr 為內存區塊的指針,它可以是數組、變量、結構體等。fread() 中的 ptr 用來存放讀取到的`數據,fwrite() 中的 ptr 用來存放要寫入的數據。
size:表示每個數據塊的字節數。
count:表示要讀寫的數據塊的塊數。
fp:表示文件指針。
理論上,每次讀寫 size*count 個字節的數據。
size_t 是在 stddef.h 頭文件中使用 typedef 定義的數據類型,表示無符號整數,也即非負數,常用來表示數量。
返回值:返回成功讀寫的塊數,也即 count。如果返回值小於 count:
對於 fwrite() 來説,肯定發生了寫入錯誤,可以用 ferror() 函數檢測。
對於 fread() 來説,可能讀到了文件末尾,可能發生了錯誤,可以用 ferror() 或 feof() 檢測。
【示例】從鍵盤輸入一個數組,將數組寫入文件再讀取出來。
#include#define N 5int main(){ //從鍵盤輸入的數據放入a,從文件讀取的數據放入b int a[N], b[N]; int i, size = sizeof(int); FILE *fp; if( (fp=fopen("D:", "rb+")) == NULL ){ printf("Cannot open file, press any key to exit!n"); getch(); exit(1); } //從鍵盤輸入數據 並保存到數組a for(i=0; i<N; i++){ scanf("%d", &a[i]); } //將數組a的內容寫入到文件 fwrite(a, size, N, fp); //將文件中的位置指針重新定位到文件開頭 rewind(fp); //從文件讀取內容並保存到數組b fread(b, size, N, fp); //在屏幕上顯示數組b的內容 for(i=0; i<N; i++){ printf("%d ", b[i]); } printf("n"); fclose(fp); return 0;}
運行結果:
23 409 500 100 222↙
23 409 500 100 222
fwrite()/fread() 函數直接操作字節,建議使用二進制方式打開文件。請閲讀《C語言中文本文件與二進制文件的區別》瞭解更多。
打開 D:,發現文件內容根本無法閲讀。這是因為我們使用"rb+"方式打開文件,數據以二進制形式寫入文件,一般無法閲讀。
數據寫入完畢後,位置指針在文件的末尾,要想讀取數據,必須將文件指針移動到文件開頭,這就是rewind(fp);的作用。更多關於rewind函數的內容請點擊:C語言rewind函數。
文件的後綴不一定是 ,它可以是任意的,你可以自己命名,例如 、、 等。
【示例】從鍵盤輸入兩個學生數據,寫入一個文件中,再讀出這兩個學生的數據顯示在屏幕上。
#include#define N 2struct stu{ char name[10]; //姓名 int num; //學號 int age; //年齡 float score; //成績}boya[N], boyb[N], *pa, *pb;int main(){ FILE *fp; int i; pa = boya; pb = boyb; if( (fp=fopen("d:", "wb+")) == NULL ){ printf("Cannot open file, press any key to exit!n"); getch(); exit(1); } //從鍵盤輸入數據 printf("Input data:n"); for(i=0; iname, &pa->num,&pa->age, &pa->score); } //將數組 boya 的數據寫入文件 fwrite(boya, sizeof(struct stu), N, fp); //將文件指針重置到文件開頭 rewind(fp); //從文件讀取數據並保存到數據 boyb fread(boyb, sizeof(struct stu), N, fp); //輸出數組 boyb 中的數據 for(i=0; iname, pb->num, pb->age, pb->score); } fclose(fp); return 0;}
運行結果:
Input data:
Tom 2 15 90.5↙
Hua 1 14 99↙
Tom 2 15 90.500000
Hua 1 14 99.000000
-
2017年3月計算機二級C語言考試摸底測試題
以下是yjbys考試網小編整理的2017年3月計算機二級C語言考試摸底測試題,希望對大家有所幫助,祝大家計算機二級考試順利通過。一、選擇題(每小題1分。)(1)程序流程圖中帶有箭頭的線段表示的是()。A.圖元關係B.數據流C.控制流D.調用關係(2)結構化程序設計的基本原則...
-
C語言if else語句彙總
對於很多情況,順序結構的代碼是遠遠不夠的,大家都接觸過C語言吧,下面是小編為大家整理的C語言ifelse語句,希望對大家有所幫助。C語言ifelse語句在C語言中,使用if和else關鍵字對條件進行判斷。請先看下面的代碼:#includeintmain(){intage;printf("請輸入你的年齡:");sc...
-
C語言精選面試題詳解
C語言是IT編程中最基礎的語言,在面試中,基本可以忽略又或者格外重要。下面是小編為大家整理的C語言精選面試題詳解,歡迎參考~分析這些面試題,本身包含很強的趣味性;而作為一名研發人員,通過對這些面試題的深入剖析則可進一步增強自身的內功。試題1:以下是引用片段:voi...
-
2017年計算機二級考試C語言備考題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級考試C語言備考題及答案,希望對大家有幫助!1.(A)是構成C語言程序的基本單位。A、函數B、過程C、子程序D、子例...