SCANF(3) FreeBSD ライブラリ関数マニュアル SCANF(3)
名称
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf − 入力のフォーマット変換 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <stdio.h> int |
scanf(const char *format, ...); int |
fscanf(FILE *stream, const char *format, ...); int |
sscanf(const char *str, const char *format, ...); #include <stdarg.h> |
int |
vscanf(const char *format, va_list ap); int |
vsscanf(const char *str, const char *format, va_list ap); int |
vfscanf(FILE *stream, const char *format, va_list ap); |
解説 |
scanf() 関数ファミリは、後述する format に従って入力を走査します。この フォーマットには 変換指示子を含めることができます。このような変換がある 時、その結果は ポインタ引数を介して格納されます。 scanf() 関数は入力を標 準入力ストリーム stdin から読み取ります。 fscanf() は入力をストリームポイ ンタ stream から読み取ります。 sscanf() は入力を str の指すキャラクタ文字 列から読み取ります。 vfscanf() 関数は、 vfprintf(3) に類似しており、ポイ ンタの可変引数リスト ( stdarg(3) を参照) を使用して、ストリームポインタ stream から入力を読み取ります。 vscanf() 関数は標準入力から、 vsscanf() 関数は文字列から可変引数リストを走査します。これらの関数はそれぞれ vprintf() 関数と vsprintf() 関数に類似しています。連続した各 ポインタ引数 は、連続したそれぞれの変換指示子と適切に対応している必要があります (ただ し、後述の ‘抑制’ を参照)。変換指示子はすべて % 文字 (パーセント符号) で 始まります。 format 文字列には、他の文字も含めることができます。 format 文字列内の空白 (ブランクやタブ、改行など) は、空白なしを含む任意の量の空 白と一致します。その他の文字はすべてそれ自身とだけ一致します。入力文字が そのようなフォーマット文字と一致しなくなったときに走査は停止します。走査 は、入力変換が行えないときにも停止します (下記参照)。 |
変換
変換の先頭となる % 文字に続いて、以下にあげるいくつかの フラグ文字をおく ことができます。 |
*
割り当ての抑制。これに続く変換は普段通りに行われますが、ポインタ は使用されません。変換の結果は単に廃棄されます。 h l L q これらのフラグに加えて、オプションとして 10 進整数で表される最大フィール ド幅を % と変換の間に置くことも可能です。フィールド幅を指定しない場合、デ フォルトの ‘無限’ が使用されます (例外が 1 つあります。後述)。フィールド 幅を指定した場合、変換処理において最大でその数の文字が走査されます。変換 が始まる前に、ほとんどの変換は空白をスキップします。この空白はフィールド 幅のカウント対象にはなりません。 以下の変換を利用できます。 % d D i o O u x X f e g E F s c [ p n 後方互換性のために、他の変換文字 ( ‘\0’ を除く) は ‘%d’ であるかのよう に、または大文字の場合は ‘%ld’ であるかのように扱われ、 ‘%\0’ の変換はた だちに EOF を戻します。 F と X の変換は、将来 ANSI C 標準に適合するように 変更される予定なので、その後では、これらの変換はそれぞれ f と x のように 動作するでしょう。 戻り値 |
これらの関数は、割り当てられた入力項目数を返します。一致が成功しなかった 場合、この数は準備されたものよりも少なく、または 0 になることさえありま す。 0 は、利用できる入力があったものの、変換が割り当てられなかったことを 示します。通常、これは ‘%d’ 変換に対するアルファベット文字等のような、無 効な入力文字のためです。なんらかの変換が発生する前に、ファイルの終りのよ うなことで入力処理が失敗した場合は、値 EOF が返されます。変換が開始した後 で、エラーまたはファイルの終りが発生した場合、正常に完了した変換の数が返 されます。 |
関連項目
規格
関数 fscanf(), scanf() および sscanf() は ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合しています。 |
歴史
関数 vscanf(), vsscanf() および vfscanf() はこのリリースではじめて登場し ました。 |
バグ
変換 %F と %X の現在の状況は不都合な状態にあります。 すべての後方互換フォーマットは、将来取り除かれます。 数値文字列は 512 文字に切り捨てられます。たとえば、 %f と %d は事実上 %512f と %512d です。 FreeBSD 10.0 December 11, 1993 FreeBSD 10.0 |