scanf 関数の型フィールド文字
更新 : 2007 年 11 月
以下の内容は、scanf 系のすべての関数 (scanf_s などのセキュリティが強化されたバージョンを含む) に当てはまります。
type 文字は、唯一の必須書式指定フィールドであり、省略可能な書式指定フィールドに続けて指定します。type 文字によって、対応する引数を文字、文字列、または数値のいずれとして解釈するかが指定されます。
scanf 関数の型フィールド文字
文字 |
必要な入力の種類 |
引数の型 |
セキュリティが強化されたバージョンのサイズ引数 |
---|---|---|---|
c |
文字scanf 関数で使用する場合は 1 バイト文字、wscanf 関数で使用する場合はワイド文字を指定します。c を指定すると、通常は読み飛ばされる空白文字も読み取られます。次の非空白 1 バイト文字を読み取るには %1s、次の非空白ワイド文字を読み取るには %1ws を使用します。 |
scanf 関数で使用する場合は char へのポインタ、wscanf 関数で使用する場合は wchar_t へのポインタ。 |
必ず指定します。サイズには、null 終端文字用の領域は含まれません。 |
C |
反対のサイズの文字。scanf 関数で使用する場合はワイド文字、wscanf 関数で使用する場合は 1 バイト文字を指定します。C を指定すると、通常は読み飛ばされる空白文字も読み取られます。次の非空白 1 バイト文字を読み取るには %1s、次の非空白ワイド文字を読み取るには %1ws を使用します。 |
scanf 関数で使用する場合は wchar_t へのポインタ、wscanf 関数で使用する場合は char へのポインタ。 |
必ず指定します。サイズ引数には、null 終端文字用の領域は含まれません。 |
d |
10 進整数。 |
int へのポインタ。 |
不可。 |
i |
整数。入力文字列が "0x" または "0X" で始まる場合は 16 進数、文字列が "0" で始まる場合は 8 進数、それ以外は 10 進数。 |
int へのポインタ。 |
不可。 |
o |
8 進整数。 |
int へのポインタ。 |
不可。 |
u |
符号なし 10 進整数。 |
unsignedint へのポインタ。 |
不可。 |
x |
16 進整数。 |
int へのポインタ。 |
不可。 |
e, E, f, g, G |
浮動小数点値。省略可能な符号 (+ または –)、小数点を含む 1 つ以上の連続する 10 進数、および必要に応じて符号付き整数値が続く省略可能な指数部 ("e" または "E") から構成されます。 |
float へのポインタ。 |
不可。 |
n |
ストリームからもバッファからも読み取られません。 |
int へのポインタ。scanf 関数または wscanf 関数の現在の呼び出しで、その時点までにストリームまたはバッファから読み取られた文字数が格納されます。 |
不可。 |
s |
最初の空白文字 (空白、タブ、または改行) までの文字列。空白文字で区切られていない文字列を読み取るには、角かっこ ([ ]) で囲みます。「scanf 関数の文字幅指定」の説明を参照してください。 |
scanf 関数で使用する場合は 1 バイト文字配列、wscanf 関数で使用する場合はワイド文字配列。どちらの場合も、文字配列は、入力フィールドと自動的に追加される終端の NULL 文字を格納するために十分な大きさである必要があります。 |
必ず指定します。サイズには、null 終端文字用の領域が含まれます。 |
S |
最初の空白文字 (空白、タブ、または改行) までの反対のサイズ文字列。空白文字で区切られていない文字列を読み取るには、角かっこ ([ ]) で囲みます。「scanf 関数の文字幅指定」の説明を参照してください。 |
scanf 関数で使用する場合はワイド文字配列、wscanf 関数で使用する場合は 1 バイト文字配列。どちらの場合も、文字配列は、入力フィールドと自動的に追加される終端の NULL 文字を格納するために十分な大きさである必要があります。 |
必ず指定します。サイズには、null 終端文字用の領域が含まれます。 |
scanf では、a 指定子および A 指定子 (「printf 関数の型フィールド文字」を参照) は使用できません。
このサイズ引数は、必要に応じて適用する引数の直後のパラメータ リストに含めて渡す必要があります。たとえば次のようなコードがあるとします。
char string1[11], string2[9];
scanf("%10s %8s", string1, 11, string2, 9);
このコードは、1 文字を c に読み込み、10 進数を i に読み込み、最大 10 文字の文字列を string1 に読み込み、最大 8 文字の文字列を string2 に読み込みます。null 終端文字の領域を確保するために、バッファ サイズは、幅の指定より少なくとも 1 多く確保する必要があります。
使用する関数が 1 バイト文字用またはワイド文字用のどちらのバージョンであるかに関係なく、書式文字列は、1 バイト文字またはワイド文字の入力を処理できます。scanf 関数と wscanf 関数を使用して 1 バイト文字またはワイド文字を読み取るときは、次の表の書式指定子を使用します。
文字の種類 |
使用する関数 |
書式指定子 |
---|---|---|
シングル バイト文字 |
scanf 関数 |
c、hc、または hC |
シングル バイト文字 |
wscanf 関数 |
C、hc、または hC |
ワイド文字 |
wscanf 関数 |
c、lc、または lC |
ワイド文字 |
scanf 関数 |
C、lc、または lC |
scanf 関数と wscanf 関数を使用して文字列をスキャンするには、上の表で c と C の代わりに s と S の型指定子を使用します。