fscanf

用於讀取數據的函數

fscanf,函數名,應用於C語言中基本的文件操作,一般是從一個流中執行格式化輸入。fscanf位於C標準庫頭文件中。

基本簡介


函數名: fscanf
功 能: 從一個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。這與fgets有區別,fgets遇到空格不結束。
fscanf
fscanf
用 法: int fscanf(FILE *stream, char *format,[argument...]);
int fscanf(文件指針,格式字元串,輸入列表);
for example:
FILE *fp;
char a[];
int b;
double c;
fscanf(fp,"%s%d%lf",a,&b,&c)
返回值:整型,數值等於[argument...]的個數

格式字元說明


常用基本參數對照:
%d:讀入一個十進位整數.
%i:讀入十進位,八進位,十六進位整數,與%d類似,但是在編譯時通過數據前置或後置來區分進位,如加入“0x”則是十六進位,加入“0”則為八進位。例如串“031”使用%d時會被算作31,但是使用%i時會算作25.
%u:讀入一個無符號十進位整數.
%f%F%g%G:用來輸入實數,可以用小數形式或指數形式輸入.
%x%X:讀入十六進位整數.
%o':讀入八進位整數.
%s:讀入一個字元串,遇空格結束。
%c:讀入一個字元。無法讀入空值。空格可以被讀入。
附加格式說明字元表修飾符說明
L/l長度修飾符輸入"長"數據
h長度修飾符輸入"短"數據
示例說明
如果要求從標準輸入中輸入一串字元串和一個整型數,那麼參數“%s%d”表示什麼呢?默認情況下,在終端上(這裡假設程序為控制台應用程序)輸入第一個參數的值的時候敲下回車,則在第二行輸入的為第二個參數值,採用這種輸入方法那麼格式字元的形式就無關緊要了。
這裡要特殊說明的是如果參數在同一行給出,那麼格式字元的參數與終端的輸入會有什麼關係。舉個例子:如果格式字元為“%s+%d”,那麼參數的輸入就應該為string+integer

程序示例


例一

#include
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中例子
Example
#include
FILE *stream;
void 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 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 );
}
}