scanf 関数と wscanf 関数の書式指定フィールドFormat Specification Fields: scanf and wscanf Functions

ここにある情報は、セキュリティが強化されたバージョンを含む scanf 系の関数すべてに当てはまり、scanf に対する stdin などの入力ストリームを解析してプログラム変数に挿入する値に変換する方法を scanf 関数に指示するために使用するシンボルについても説明します。The information here applies to the entire scanf family of functions, including the secure versions and describes the symbols used to tell the scanf functions how to parse the input stream, such as the input stream stdin for scanf, into values that are inserted into program variables.

書式指定は、次の形式で行います。A format specification has the following form:

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

format 引数では入力の解釈方法を指定します。次の文字を 1 つ以上指定できます。The format argument specifies the interpretation of the input and can contain one or more of the following:

  • 空白文字: 空白 (' ')、タブ ('\t')、または改行 ('\n')。White-space characters: blank (' '); tab ('\t'); or newline ('\n'). 空白文字が現れると、scanf は、次の非空白文字が現れるまで、入力データ内の連続するすべての空白文字を読み取ります。ただし、読み取るだけで格納しません。A white-space character causes scanf to read, but not store, all consecutive white-space characters in the input up to the next non-white-space character. 書式に指定された 1 つの空白文字は、入力データ内の任意の個数 (0 を含む) の空白文字および任意の組み合わせの空白文字と一致します。One white-space character in the format matches any number (including 0) and combination of white-space characters in the input.

  • パーセント記号 (%) 以外の非空白文字。Non-white-space characters, except for the percent sign (%). 非空白文字が現れると、scanf 関数は、一致する非空白文字を読み取ります。ただし、読み取るだけで格納しません。A non-white-space character causes scanf to read, but not store, a matching non-white-space character. 入力ストリーム中の次の文字が一致しないと、scanf 関数は終了します。If the next character in the input stream does not match, scanf terminates.

  • パーセント記号 (%) に続く書式指定。Format specifications, introduced by the percent sign (%). 書式指定がある場合、scanf 関数は、入力データ中の文字を読み取り、指定されている型の値に変換します。A format specification causes scanf to read and convert characters in the input into values of a specified type. 変換後の値は、引数リスト内の引数に代入されます。The value is assigned to an argument in the argument list.

書式は左から右へ読み取られます。The format is read from left to right. 書式指定以外の文字は、入力ストリーム内の一連の文字列に一致するものと想定されます。これらの文字は入力ストリーム内でスキャンされますが格納はされません。Characters outside format specifications are expected to match the sequence of characters in the input stream; the matching characters in the input stream are scanned but not stored. 入力ストリーム内の文字が書式指定に合わないと、scanf 関数は終了し、その文字は読み取られなかったものとして入力ストリームに残ります。If a character in the input stream conflicts with the format specification, scanf terminates, and the character is left in the input stream as if it had not been read.

最初の書式指定が見つかると、最初の入力フィールドの値がこの指定に従って変換され、最初の argument で指定された位置に格納されます。When the first format specification is encountered, the value of the first input field is converted according to this specification and stored in the location that is specified by the first argument. 2 番目の書式指定が見つかると、2 番目の入力フィールドが変換され、2 番目の argument に格納されます。この手順は、書式指定文字列が終わるまで続きます。The second format specification causes the second input field to be converted and stored in the second argument, and so on through the end of the format string.

入力フィールドは、最初の空白文字 (空白、タブ、または改行) までのすべての文字、書式指定に従って変換できない最初の文字までのすべての文字、またはフィールド幅 (指定されている場合) に到達するまでのすべての文字として定義されます。An input field is defined as all characters up to the first white-space character (space, tab, or newline), or up to the first character that cannot be converted according to the format specification, or until the field width (if specified) is reached. 書式指定に対して引数が多すぎる場合、余分な引数は評価されるだけで無視されます。If there are too many arguments for the given specifications, the extra arguments are evaluated but ignored. 書式指定に必要な引数が足りない場合、結果は予測できません。The results are unpredictable if there are not enough arguments for the format specification.

各書式指定フィールドには、特定の書式を表す 1 つの文字または数字を指定します。Each field of the format specification is a single character or a number signifying a particular format option. type 文字は省略可能な最後の書式フィールドの次に指定し、入力フィールドを文字、文字列、または数値のうちいずれとして解釈するかを決定します。The type character, which appears after the last optional format field, determines whether the input field is interpreted as a character, a string, or a number.

最も簡単な書式指定は、パーセント記号と type 文字だけ (%s など) で行います。The simplest format specification contains only the percent sign and a type character (for example, %s). パーセント記号 (%) の後に書式指定文字として意味がない文字が続くと、その文字と以降の文字は、次のパーセント記号が現れるまで、普通の文字列、つまり入力に一致しなければならない一連の文字列として処理されます。If a percent sign (%) is followed by a character that has no meaning as a format-control character, that character and the following characters (up to the next percent sign) are treated as an ordinary sequence of characters, that is, a sequence of characters that must match the input. パーセント記号を入力文字として処理するには、%% と指定します。For example, to specify that a percent-sign character is to be input, use %%.

パーセント記号の後にアスタリスク (*) を指定すると、次の入力フィールドは指定されている型のフィールドとして解釈されますが、引数には代入されません。An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. このフィールドはスキャンされるだけで、値は格納されません。The field is scanned but not stored.

_s 系の関数で scanf サフィックスが付いているセキュリティが強化されたバージョンでは、型が cCsS、または [ であるすべてのパラメーターに続けてバッファー サイズのパラメーターを渡す必要があります。The secure versions (those with the _s suffix) of the scanf family of functions require that a buffer size parameter be passed immediately following each parameter of type c, C, s, S or [. scanf 系の関数のセキュリティが強化されたバージョンの詳細については、「scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l」を参照してください。For more information on the secure versions of the scanf family of functions, see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.

関連項目See also

scanf 関数の文字幅指定scanf Width Specification
scanf 関数の型フィールド文字scanf Type Field Characters
scanf、_scanf_l、wscanf、_wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_lscanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l