書式指定フィールド:
ここでの情報は、セキュリティで保護されたバージョンを含む、 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はscanfwidth仕様を表し、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