了解fscanf,fread的用法和區別

2021-08-02 00:11:05 字數 1638 閱讀 6072

fscanf:

函式原型:

int  fscanf(file *fp,"格式化字串",【輸入項位址表】);
功能為:從檔案指標fp所指向的檔案中按照格式字串指定的格式將檔案中的資料送到輸入項位址表中。若讀取資料成功會返回所讀取資料的個數,並將資料按照指定格式存入記憶體中的變數或陣列中,檔案指標自動向下移動;若讀取失敗則返回eof。

注意:遇到空格和換行時結束

例如,e盤資料夾下test.txt中存有以下資料,該資料有學號,姓名,性別3項資料,每個資料之間用空格間隔,如圖所示,現從該檔案中讀取出該條資料給指定的變數。

char num[20],name[40],***[5];

file *fp;

fp=fopen("e:\\code\\test.txt","rt");

fscanf(fp,"%s %s %s",num,name,***);

首先,以唯讀方式開啟指定檔案,然後將檔案中的學號,姓名,性別分別賦給字元陣列num,name和***。

fread:

函式原型:

int fread(void *buffer,int size,int count,file *fp);
功能為:從檔案指標fp所指向的檔案的當前位置開始,一次讀入size個位元組,重複count次,並將讀取到的資料存到buffer開始的記憶體區中,同時將讀寫位置指標後移size*count次。該函式的返回值是實際讀取的count值。

buffer:是乙個指標,在fread函式中,它表示存放讀入資料的首位址(即存放在何處)。

size:表示資料塊的位元組數。

count:表示要讀寫的資料塊快數。

fp:表示檔案指標。

例如:

float fa[5];

fread (fa,4,5,fp);

其意義是從fp所指的檔案中,每次讀入4個位元組送入到實型陣列fa中,連續讀5次,即讀5個實數到fa中。

接下來說一下這兩個區別

首先一定要記住fread函式只用於讀二進位制檔案,而fscanf可以讀文字也可以讀二進位制。

其次在用鍊錶進行檔案的讀取建議用fscanf(當然也可以先踩踩坑)。

注意下面這段話(這個也是自己在網上找的)

文字方式不能完全讀取, 而二進位制方式能的原因- 文字方式讀取檔案, 最主要的用處是一次讀取一整句( 以換行符』/n』, 即二進位制的換行標誌」/r/n」結束 ), 方便用於特殊用處readstring、fscanf(…,」%s」,…)之類, 每次讀取的內容長度是不定的; 而二進位制讀取方式read、fread等, 都是讀取固定長度 所以文字方式讀取對eof的判定, 是乙個檔案尾結束標誌, 如果是文字檔案, 則這個檔案尾肯定不會出現在檔案內容中( 因為是不可列印字元構成的結束標誌, 人可讀的文字檔案不會包括它 ), 這樣以結束標誌為檔案尾則是可以的; 二進位制檔案內容可以是任意位元組, 如果把它當文字檔案來讀, 以檔案尾為結束, 當然可能出現把檔案內容判定為檔案尾的情況; 二進位制讀取方式由於每次讀取固定位元組, 所以只需要用總檔案長度( 這個數值是系統管理的數值, 不是計算得出來的 )減去每次讀取的長度( 或根據seek的位置計算長度 ), 就可以知道是否到檔案尾, 不需要定義結束標誌; 所以用二進位制方式開啟任何檔案都是合理的

用自己話了解Ajax的基本使用

ajax優點 非同步區域性重新整理,不打斷使用者的操作,增強b s架構的體驗性 b s 瀏覽器對伺服器 c s 客戶端與伺服器 ajax獲取文字框中的值 文字框id val 例項 function a1 控制器裡的路徑 url 提交的路徑 data data 要傳給控制器的引數 獲取到文字框中的值 ...

指向類成員指標(僅作了解用)

說明 首先本文涉及的只是對於c 的特性稍作深入了解,在實際開發中應用可能不多。純屬概念和感性認識吧!o o 相對於一般的指標,指向乙個類成員的指標稍微有點 怪異 不過,當你理解了其原理以後,你就不會這麼覺得了。對於一般的指標來說,它被定義為乙個指向某個 位址 的變數,但是,對於指向類成員的指標來說,...

用Python更加了解微信好友

執行平台 windows python版本 python3.6 ide sublime text wxpy 在 itchat 的基礎上,通過大量介面優化提公升了模組的易用性,並進行豐富的功能擴充套件。wxpy一些常見的場景 wxpy 支援 python 3.4 3.6,以及 2.7 版本 將下方命令...