fscanf ()- 讀取格式化資料

格式

#include <stdio.h>
int fscanf (FILE *stream, const char *format-string, argument-list);

語言層次

ANSI

安全執行緒

區分語言環境

此函數的行為可能受到現行語言環境的 LC_CTYPE 及 LC_NUMERIC 種類的影響。 如果在編譯指令上指定 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,則現行語言環境的 LC_UNI_CTYPE 種類也可能影響行為。 如需相關資訊,請參閱 瞭解 CCSID 及語言環境

說明

fscanf() 函數會將資料從指定 串流 的現行位置讀取至 argument-list中項目所提供的位置 (如果有的話)。 argument-list 中的每一個項目都必須是變數的指標,其類型對應於 format-string中的類型指定元。

format-string 控制輸入欄位的解譯,並具有與 scanf() 函數的 format-string 引數相同的格式及函數。

回覆值

fscanf() 函數會傳回它已順利轉換並指派的欄位數。 回覆值不包含 fscanf() 函數所讀取但未指派的欄位。

如果在任何轉換之前發生輸入失敗,則回覆值為 EOF ,如果成功,則回覆值為指派的輸入項目數。

範例

此範例會開啟檔案 myfile 進行讀取,然後掃描此檔案以找出字串、長整數值、字元及浮點數值。
#include <stdio.h>
 
#define  MAX_LEN  80
 
int main(void)
{
   FILE *stream;
   long l;
   float fp;
   char s[MAX_LEN + 1];
   char c;
 
   stream = fopen("mylib/myfile", "r");
 
   /* Put in various data. */
 
   fscanf(stream, "%s", &s [0]);
   fscanf(stream, "%ld", &l);
   fscanf(stream, "%c", &c);
   fscanf(stream, "%f", &fp);
 
   printf("string = %s\n", s);
   printf("long double = %ld\n", l);
   printf("char = %c\n", c);
   printf("float = %f\n", fp);
}
 
/***************  If myfile contains  ************************
**************** abcdefghijklmnopqrstuvwxyz 343.2 ***********
**********************  expected output is:  *********************
 
string = abcdefghijklmnopqrstuvwxyz
long double = 343
char = .
float = 2.000000
*/

相關資訊