書式指定フィールド: scanf および wscanf 関数

ここでの情報は、セキュリティで保護されたバージョンを含む関数のファミリ全体 scanf に適用されます。 入力ストリームなどの入力ストリームをプログラム変数に挿入される値に解析する方法をstdin関数に指示scanfするために使用されるシンボルについて説明します。

引数は format 、入力の解釈を指定する文字列であり、次の 1 つ以上を含めることができます。

  • 空白文字: 空白 ( )、タブ (\t)、または改行 (\n)。 空白文字が現れると、scanf は、次の非空白文字が現れるまで、入力データ内の連続するすべての空白文字を読み取ります。ただし、読み取るだけで格納しません。 書式に指定された 1 つの空白文字は、入力データ内の任意の個数 (0 を含む) の空白文字および任意の組み合わせの空白文字と一致します。

  • パーセント記号 (%) 以外の非空白文字。 非空白文字が現れると、scanf 関数は、一致する非空白文字を読み取ります。ただし、読み取るだけで格納しません。 入力ストリーム内の次の文字が一致しない場合は終了 scanf します。

  • パーセント記号 (%) に続く書式指定。 書式指定では、 scanf 入力の文字を読み取り、指定した型の値に変換します。 変換後の値は、引数リスト内の引数に代入されます。

    書式指定は、次の形式で行います。

    %[*][width][{h|l|ll|I64|L}]type

    ここで、, , , , , , I64, および幅指定scanf表しLtype、型フィールド文字scanf表します。 lllhwidth

format引数文字列は左から右に読み取られます。 書式指定外の文字は、入力ストリーム内の文字のシーケンスと一致することが想定されます。 入力ストリーム内の一致する文字はスキャンされますが、保存されません。 入力ストリーム内の文字が書式指定と競合し、 scanf 終了し、文字が読み取られていなかったかのように入力ストリームに残ります。

最初の書式指定が検出されると、最初の入力フィールドの値がこの仕様に従って変換されます。 この値は、引数の後の最初の引数で指定された場所に format 格納されます。 2 番目の書式指定では、2 番目の入力フィールドが変換され、次の引数に格納され、書式指定文字列の末尾まで格納されます。

入力フィールドは、最初の空白文字 (スペース、タブ、または改行) まで、または書式指定に従って変換できない最初の文字まで、またはフィールド幅 (指定されている場合) に達するまでのすべての文字として定義されます。 書式指定に対して引数が多すぎる場合、余分な引数は評価されるだけで無視されます。 書式指定に十分な引数がない場合、結果は予測できません。

各書式指定フィールドには、特定の書式を表す 1 つの文字または数字を指定します。 type 文字は省略可能な最後の書式フィールドの次に指定し、入力フィールドを文字、文字列、または数値のうちいずれとして解釈するかを決定します。

最も簡単な書式指定は、パーセント記号と type 文字だけ (%s など) で行います。 パーセント記号 (%) の後に書式制御文字として意味のない文字が続く場合、その文字と次の文字 (次のパーセント記号まで) は通常の文字シーケンスとして扱われます。 つまり、入力と一致する必要がある文字のシーケンスとして扱われます。 パーセント記号を入力文字として処理するには、%% と指定します。

パーセント記号の後にアスタリスク (*) を指定すると、次の入力フィールドは指定されている型のフィールドとして解釈されますが、引数には代入されません。 フィールドはスキャンされますが、引数には格納されません。

セキュリティで保護されたバージョン (サフィックスを_s持つバージョン) scanf の関数には、型 cSCsまたは[直後に渡されるバッファー サイズ パラメーターの各パラメーターが必要です。 scanf 系の関数のセキュリティが強化されたバージョンの詳細については、「scanf_s_scanf_s_lwscanf_s_wscanf_s_l」を参照してください。

関連項目

scanf 幅の指定
scanf フィールド文字の入力
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l