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
*/