fscanf 一般形式
函數聲明
int fscanf(FILE *stream, char *format);
參數
stream-- 這是指向 FILE 對象的指針,該 FILE 對象标識了流。
format-- 這是 C 字符串,包含了以下各項中的一個或多個:空格字符、非空格字符和format 說明符。 format 說明符形式為[=%[*][width][modifiers]type=]
功 能
從一個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。這與fgets有區别,fgets遇到空格不結束。
返回值
整型,成功返回讀入的參數的個數,失敗返回EOF(-1)。
格式字符詳解
format 說明符形式為[=%[*][width][modifiers]type=]
具體講解如下:
fscanf 類型說明符
%d:讀入一個十進制整數。
%i :讀入十進制,八進制,十六進制整數,與%d類似,但是在編譯時通過數據前置或後置來區分進制,如加入“0x”則是十六進制,加入“0”則為八進制。例如串“031”使用%d時會被算作31,但是使用%i時會算作25。
%u:讀入一個無符号十進制整數。
%f %F %g %G : 用來輸入實數,可以用小數形式或指數形式輸入。
%x %X: 讀入十六進制整數。
%o': 讀入八進制整數。
%s : 讀入一個字符串,遇空字符‘0'結束。
%c : 讀入一個字符。無法讀入空值。空格可以被讀入。
附加格式說明字符表修飾符說明
L/l 長度修飾符 輸入"長"數據
h 長度修飾符 輸入"短"數據
程序例
示例一
#include
#include
int main()
{
char str1[10], str2[10], str3[10];
int year;
FILE * fp;
fp = fopen ("file.txt", "w+");
fputs("We are in 2014", fp);
rewind(fp);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
printf("Read String1 |%s|n", str1 );
printf("Read String2 |%s|n", str2 );
printf("Read String3 |%s|n", str3 );
printf("Read Integer |%d|n", year );
fclose(fp);
return(0);
}
輸出結果:
Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2014|
示例二
附:MSDN中例子
#include
FILE *stream;
int main(void)
{
long l;
float fp;
char s;
char c;
stream = fopen("fscanf.out", "w+");
if(stream==NULL)
printf("The file fscanf.out was not openedn");
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("%sn",s);
printf("%ldn",l);
printf("%fn",fp);
printf("%cn",c);
fclose(stream);
}
return 0;
}//這樣會有意外輸出