fgets(),fscanf(),fprintf()

  功能html

      從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'\0'),若是文件中的該行,不足bufsize個字符,則讀完該行就結束。如若該行(包括最後一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,可是,緩衝區老是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。所以咱們不能直接經過fgets的返回值來判斷函數是不是出錯而終止的,應該藉助feof函數或者ferror函數來判斷數組

    函數原型
ide

char *fgets(char *buf, int bufsize, FILE *stream);    函數

     *buf:字符型指針,指向用來存儲所得數據的地址。spa

bufsize: 整型數據,指明存儲數據的大小。指針

*stream: 文件結構體指針,將要讀取的文件流。orm


stream文件流指針體指向文件內容地址的偏移原則htm

若是使用fgets()讀取某個文件,第一次讀取的bufsize爲5,而文件的第一行有10個字符(算上'\n'),那麼讀取文件的指針會偏移至當前讀取完的這個字符以後的位置。也就是第二次再用fgets()讀取文件的時候,則會繼續讀取其後的字符。而,若是使用fgets() 讀取文件的時候bufsize大於該行的字符總數加2(多出來的兩個,一個保存文件自己的'\n'換行,一個保存字符串自己的結束標識'\0'),文件並不會繼續讀下去,僅僅只是這一行讀取完,隨後指向文件的指針會自動偏移至下一行。字符串

例子get

若是一個文件的當前位置的文本以下

Love, I Have

Since you can do it.

若是用fgets(str1,6,file1);去讀取

則執行後str1 = "Love," ,讀取了6-1=5個字符

這個時候再執行fgets(str1,20,file1)則執行後str1 = " I Have\n"

而若是

fgets(str1,23,file1);

則執行str1="Love ,I Have",讀取了一行(包括行尾的'\n',並自動加上字符串結束符'\0'),當前文件位置移至下一行,雖然23大於當前行上字符總和,但是不會繼續到下一行。而下一次調用fgets()繼續讀取的時候是從下一行開始讀。

從 handle 指向的文件中讀取一行並返回長度最多爲 length - 1 字節的字符串。碰到換行符(包括在返回值中)、EOF 或者已經讀取了 length - 1 字節後中止(看先碰到那一種狀況)。若是沒有指定 length,則默認爲 1K,或者說 1024 字節。

出錯時返回 FALSE。

②fscanf() 

功 能:

從一個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。這與fgets有區別,fgets遇到空格不結束。

用 法: int fscanf(FILE *stream, char *format,[argument...]);

int fscanf(文件指針,格式字符串,輸入列表);

   

經常使用基本參數對照:

%d:讀入一個十進制整數.

%i :讀入十進制,八進制,十六進制整數,與%d相似,可是在編譯時經過數據前置來區分進制,如加入「0x」則是十六進制,加入「0」則爲八進制。例如串「031」使用%d時會被算做31,可是使用%i時會算做25.

%u:讀入一個無符號十進制整數.

%f %F %g %G : 用來輸入實數,能夠用小數形式或指數形式輸入.

%x %X: 讀入十六進制整數.

%o': 讀入八進制整數.

%s : 讀入一個字符串,遇空格結束。

%c : 讀入一個字符。沒法讀入空值。空格能夠被讀入。

fprintf()

fprintf是C/C++中的一個格式化寫-庫函數,位於頭文件<stdio.h>中,其做用是格式化輸出到一個流/文件中;函數原型爲int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函數根據指定的格式(format)向輸出流(stream)寫入數據(argument)。

2.fprintf(stdout,「hello world\n」)

相關文章
相關標籤/搜索