基本介紹
- 中文名:fscanf
- 外文名:fscanf
- 類別:計算機軟體
- 簡述:C語言中基本的檔案操作
- 函式名:fscanf
- FILE *stream:檔案指針
一般形式,格式字元說明,程式例,例一,例二,
一般形式
函式名: fscanf
功 能: 從一個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。這與fgets有區別,fgets遇到空格不結束。
返回值:整型,成功返回讀入的參數的個數,失敗返回EOF(-1)。
用法:
int fscanf(FILE*stream,constchar*format,[argument...]);
FILE *stream:檔案指針
char *format:格式字元串
[argument...]:輸入列表
格式字元說明
常用基本參數對照:
%d:讀入一個十進制整數.
%i :讀入十進制,八進制,十六進制整數,與%d類似,但是在編譯時通過數據前置或後置來區分進制,如加入“0x”則是十六進制,加入“0”則為八進制。例如串“031”使用%d時會被算作31,但是使用%i時會算作25.
%u:讀入一個無符號十進制整數.
%f %F %g %G : 用來輸入實數,可以用小數形式或指數形式輸入.
%x %X: 讀入十六進制整數.
%o': 讀入八進制整數.
%s : 讀入一個字元串,遇空字元‘\0'結束。
%c : 讀入一個字元。無法讀入空值。空格可以被讀入。
附加格式說明字元表修飾符說明
L/l 長度修飾符 輸入"長"數據
h 長度修飾符 輸入"短"數據
示例說明
如果要求從標準輸入中輸入一串字元串和一個整型數,那么參數“%s%d”表示什麼呢?默認情況下,在終端上(這裡假設程式為控制台應用程式)輸入第一個參數的值的時候敲下回車,則在第二行輸入的為第二個參數值,採用這種輸入方法那么格式字元的形式就無關緊要了。
這裡要特殊說明的是如果參數在同一行給出,那么格式字元的參數與終端的輸入會有什麼關係。舉個例子:如果格式字元為“%s+%d”,那么參數的輸入就應該為 string + integer。
程式例
例一
#include <stdlib.h>#include <stdio.h>int main(void){ int i; printf("Input an integer:"); /*從標準輸入中讀取一個整數*/ if(fscanf(stdin, "%d",&i)) printf("The integer read was:%d\n", i); else { fprintf(stderr, "Error reading an integer from stdin.\n"); exit(1); } return 0;}返回EOF如果讀取到檔案結尾。
例二
附:MSDN中例子
#include <stdio.h>FILE *stream;int main(void){ long l; float fp; char s[81]; char c; stream = fopen("fscanf.out", "w+"); if(stream==NULL) printf("The file fscanf.out was not opened\n"); else { fprintf(stream,"%s%ld%f%c","a-string", 65000,3.14159, 'x'); /*將指針設定至檔案開頭*/ fseek(stream,0L,SEEK_SET); /*從檔案中讀取數據*/ fscanf(stream,"%s",s); fscanf(stream,"%ld",&l); fscanf(stream,"%f",&fp); fscanf(stream,"%c",&c); /*輸出讀取的數據*/ printf("%s\n",s); printf("%ld\n",l); printf("%f\n",fp); printf("%c\n",c); fclose(stream); } return 0;}//這樣會有意外輸出