書式指定フィールド: scanf
関数と wscanf
関数
ここでの情報は、セキュリティで保護されたバージョンを含む、 scanf
関数ファミリ全体に適用されます。 入力ストリームstdin
などの入力ストリームをプログラム変数に挿入された値に解析する方法をscanf
関数に指示するために使用されるシンボルについて説明します。
format
引数は、入力の解釈を指定する文字列であり、次の 1 つ以上を含めることができます。
空白文字: 空白 (
\t
)、または改行 (\n
)。 空白文字が現れると、scanf
は、次の非空白文字が現れるまで、入力データ内の連続するすべての空白文字を読み取ります。ただし、読み取るだけで格納しません。 書式に指定された 1 つの空白文字は、入力データ内の任意の個数 (0 を含む) の空白文字および任意の組み合わせの空白文字と一致します。パーセント記号 (
%
) 以外の非空白文字。 非空白文字が現れると、scanf
関数は、一致する非空白文字を読み取ります。ただし、読み取るだけで格納しません。 入力ストリーム内の次の文字が一致しない場合は、scanf
終了します。パーセント記号 (
%
) に続く書式指定。 書式指定により、scanf
は入力の文字を読み取り、指定した型の値に変換します。 変換後の値は、引数リスト内の引数に代入されます。書式指定は、次の形式で行います。
%
[*
][width
][{h
|l
|ll
|I64
|L
}]type
ここで、
width
、h
、l
、ll
、I64
、およびL
はscanf
width仕様を表し、type
はscanf
型フィールド文字を表します。
format
引数文字列は左から右に読み取られます。 書式指定外の文字は、入力ストリーム内の文字のシーケンスと一致することが想定されます。 入力ストリーム内の一致する文字はスキャンされますが、保存されません。 入力ストリーム内の文字が書式指定と競合する場合、 scanf
は終了し、文字は読み取られていなかったかのように入力ストリームに残ります。
最初の書式指定が検出されると、最初の入力フィールドの値がこの仕様に従って変換されます。 この値は、 format
引数の後の最初の引数で指定された場所に格納されます。 2 番目の書式指定では、2 番目の入力フィールドが変換され、次の引数に格納され、書式指定文字列の末尾まで格納されます。
入力フィールドは、最初の空白文字 (スペース、タブ、または改行) まで、または書式指定に従って変換できない最初の文字まで、またはフィールド幅 (指定されている場合) に達するまでのすべての文字として定義されます。 書式指定に対して引数が多すぎる場合、余分な引数は評価されるだけで無視されます。 書式指定に十分な引数がない場合、結果は予測できません。
各書式指定フィールドには、特定の書式を表す 1 つの文字または数字を指定します。 type
文字は省略可能な最後の書式フィールドの次に指定し、入力フィールドを文字、文字列、または数値のうちいずれとして解釈するかを決定します。
最も簡単な書式指定は、パーセント記号と type
文字だけ (%s
など) で行います。 パーセント記号 (%
) の後に書式制御文字として意味のない文字が続く場合、その文字と次の文字 (次のパーセント記号まで) は通常の文字シーケンスとして扱われます。 つまり、入力と一致する必要がある文字のシーケンスとして扱われます。 パーセント記号を入力文字として処理するには、%%
と指定します。
パーセント記号の後にアスタリスク (*
) を指定すると、次の入力フィールドは指定されている型のフィールドとして解釈されますが、引数には代入されません。 フィールドはスキャンされますが、引数には格納されません。
scanf
関数ファミリのセキュリティで保護されたバージョン (_s
サフィックスを持つもの) には、直後にバッファー サイズ パラメーターを渡すために、c
、C
、s
、S
、または[
の各パラメーターが必要です。 scanf
系の関数のセキュリティが強化されたバージョンの詳細については、「scanf_s
、_scanf_s_l
、wscanf_s
、_wscanf_s_l
」を参照してください。
関連項目
scanf
幅の指定
scanf
フィールド文字の入力
scanf
、 _scanf_l
、 wscanf
、 _wscanf_l
scanf_s
、 _scanf_s_l
、 wscanf_s
、 _wscanf_s_l