大家已經熟悉的用printf函式和scanf函式向終端進行格式化的輸入輸出,即用各種不同的格式以終端為物件輸入輸出資料。其實檔案也能進行格式化輸入輸出。這時就要用到fprintf函式和fscanf函式,他們的一般呼叫方式為:
fprintf(檔案指標,格式字串,輸出列表);
fscanf(檔案指標,格式字串,輸入列表);
例如:
fprintf(fp,"%d,%6.2f",i,f);
它的作用是將int型變數i和float變數f的值按%d和%6.2f輸出到fp所指向檔案中。
fscanf(fp,"%d,%f",&i,&f);
它的作用是磁碟中檔案如果有字元「3,4.5」,則從磁碟檔案中讀取整數3給整型變數i,讀取4.5給float型變數f。
用fprintf函式和fscanf函式對磁碟檔案讀寫,使用方便,容易理解,但由於輸入時要把檔案中的ascii碼轉換為二進位制形式在儲存在記憶體變數中,在輸出時要把記憶體中的二進位制形式轉化成字元,要花費較多的時間。因此,在磁碟頻繁交換資料的情況下,最好不要用。而用下面介紹的fread函式和fwrite函式進行二進位制的讀寫。
fwrite(buffer,size,count,fp);
功能:以資料塊的方式給檔案寫入內容
引數:buffer:準備寫入檔案資料的位址
size: size_t 為 unsigned int型別,此引數指定寫入檔案內容的塊資料大小
count:寫入檔案的塊數
fp:已經開啟的檔案指標
返回值:
成功:實際成功寫入檔案資料的塊數目,此值和 count 相等
失敗:0
如果有乙個struct student-type結構體型別
struct student_type
stud[40];
用for迴圈把記憶體中的學生資料輸出到磁碟中
for(i=0;i<40;i++)
fread(buffer,size,count,fp)
功能:以資料塊的方式從檔案中讀取內容
引數:buffer:存放讀取出來資料的記憶體空間
size: unsigned int型別,此引數指定讀取檔案內容的塊資料大小
count:讀取檔案的塊數,讀取檔案資料總大小為:size * count
fp:已經開啟的檔案指標
返回值:
成功:實際成功讀取到內容的塊數,如果此值比小count,但大於0,說明讀到檔案的結尾。
失敗:0
同樣是上面的結構體用for迴圈輸入學生資料
for(i=0;i<40;i++)
c語言 十進位制轉二進位制
在一些高階語言中都有現成的將各種進製之間的轉換函式,c語言中沒有這種函式,自己寫也很方便。這是我在一本書上看到的一道題。題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。輸入 輸入可能包含多個測試樣例。對於每個輸入檔案,第一行輸入乙個整數t,代表測試樣例的數量。對於每個測試...
C語言讀寫二進位製流
學習赫夫曼編碼,對於如何把二進位製流存入二進位制檔案或如何從二進位制檔案讀出二進位製流進行了研究,總結網上諸多大俠的片言隻語,實現了這一功能。宣告 本人只是在學習c語言,不能跟專業人士相提並論。原理是用一組掩碼與要讀出或寫入的字元進行位運算,逐個寫入或輸出二進位製碼流。原始碼 include def...
c語言 反轉二進位制數
1.編寫函式 unsigned int reverse bit unsigned int value 這個函式的返回值value的二進位制位模式從左到右翻轉後的值。如 在32位機器上25這個值包含下列各位 00000000000000000000000000011001 翻轉後 2550136832...