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() 関数は、指定された stream の現在位置から、argument-list のエントリー (存在する場合) で指定されたロケーションにデータを読み取ります。argument-list の各エントリーは、format-string の型指定子に対応する型を持つ変数を指すポインターでなければなりません。

format-string は入力フィールドの解釈を制御し、scanf() 関数の format-string 引数と同じ形式と機能を持ちます。

戻り値

fscanf() 関数は正常に変換し、割り当てたフィールド数を戻します。 戻り値に、fscanf() 関数が読み取ったが割り当てなかったフィールドは含まれません。

変換の前に入力障害が起こった場合、戻り値は EOF です。成功した場合、戻り値は割り当てられた入力項目の数です。

次の例はファイル myfile をオープンして読み取り、ストリング、long 型整数値、文字、および浮動小数点値についてこのファイルを走査します。
#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
*/