scanf
型フィールド文字
次の情報は、 scanf
など、安全なバージョンを含む scanf_s
関数ファミリのいずれかに適用されます。
type
文字だけが必須の書式フィールドであり、任意の省略可能な書式フィールドをその後に続けて指定します。 type
文字は、関連付けられた引数が、文字、文字列、または数として解釈されるかどうかを決定します。
scanf
関数の type
文字
文字 | 必要な入力の型 | 引数の型 | 安全なバージョンのサイズ引数ですか。 |
---|---|---|---|
c |
文字です。 scanf 関数で使用する場合は 1 バイト文字を指定し、 wscanf 関数で使用する場合はワイド文字を指定します。 空白文字は通常はスキップされますが、 c が指定されている場合は読み取られます。 他の型フィールドとは異なり、フィールド幅指定子は、最大ではなく正確な文字数を示します。 次の空白以外の 1 バイト文字を読み取るには %1s を使用し、次の空白以外のワイド文字を読み取るには %1ws を使用します。 |
char へのポインターは scanf 関数で使用され、 wchar_t へのポインターは wscanf 関数で使用されます。 |
必須。 サイズには、null ターミネータのスペースは含まれません。 |
C |
反対のサイズ文字です。 scanf 関数で使用する場合はワイド文字を指定し、 wscanf 関数で使用する場合は 1 バイト文字を指定します。 空白文字は通常はスキップされますが、 C が指定されている場合は読み取られます。 他の型フィールドとは異なり、フィールド幅指定子は、最大ではなく正確な文字数を示します。 次の空白以外の 1 バイト文字を読み取るには %1s を使用し、次の空白以外のワイド文字を読み取るには %1ws を使用します。 |
wchar_t へのポインターは scanf 関数で使用され、 char へのポインターは wscanf 関数で使用されます。 |
必須。 Size 引数には、null ターミネータのスペースは含まれません。 |
d |
10 進整数です。 | int へのポインターです。 |
いいえ。 |
i |
整数。 入力文字列が "0x" または "0X" で始まる場合は 16 進数、文字列が "0" で始まる場合は 8 進数、それ以外の場合は 10 進数です。 | int へのポインターです。 |
いいえ。 |
o |
8 進数です。 | int へのポインターです。 |
いいえ。 |
p |
16 進数のポインター アドレス。 読み取る最大桁数は、ポインターのサイズ (32 ビットまたは 64 ビット) によって異なります。これは、コンピューターのアーキテクチャによって異なります。 "0x" または "0X" はプレフィックスとして受け入れられます。 | void* へのポインターです。 |
いいえ。 |
u |
符号なし 10 進整数。 | unsigned int へのポインターです。 |
いいえ。 |
x |
16 進整数です。 | int へのポインターです。 |
いいえ。 |
e 、 E 、 f 、 F 、 g 、 G |
次の順序で構成される浮動小数点の値です。省略可能な符号 (+ または -)、小数点のある一連の 10 進数、省略可能な指数 ("e" または "E") とそれに続く省略可能な符号付き整数値。 | float へのポインターです。 |
いいえ。 |
a , A |
次の順序で構成される浮動小数点の値です。小数点 (省略可能) のある一連の 16 進数、指数 ("p" または "P") とそれに続く 10 進数の値。 | float へのポインターです。 |
いいえ。 |
n |
ストリームまたはバッファーからの入力は読み取られません。 | int へのポインターであり、そこには scanf 関数または wscanf 関数への呼出しまでストリームまたはバッファーから読み取られた文字数が格納されます。 |
いいえ。 |
s |
最初の空白文字 (スペース、タブ、または改行) までの文字列。 スペースで区切られていない文字列を読み取るには、「scanf での幅指定」で説明したように、角かっこのセット ([ ] ) を使用します。 |
scanf 関数で使用する場合は 1 バイト文字配列を意味し、 wscanf 関数で使用する場合はワイド文字配列を意味します。 どちらの場合も、文字配列は入力フィールドと自動的に追加される終端の null 文字に十分な大きさにする必要があります。 |
必須。 サイズには null 終端文字のスペースが含まれます。 |
S |
最初の空白文字 (スペース、タブ、または改行) までの反対のサイズ文字列。 スペースで区切られていない文字列を読み取るには、「scanf での幅指定」で説明したように、角かっこのセット ([ ] ) を使用します。 |
scanf 関数で使用する場合はワイド文字配列を意味し、wscanf 関数で使用する場合は 1 バイト文字配列を意味します。 どちらの場合も、文字配列は入力フィールドと自動的に追加される終端の null 文字に十分な大きさにする必要があります。 |
必須。 サイズには null 終端文字のスペースが含まれます。 |
必要に応じて、size 引数をパラメーター リストで、適用される引数の直後に渡す必要があります。 コード例を次に示します。
char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);
10 文字までの文字列を string1
で読み取り、8 文字までの文字列を string2
で読み取ります。 バッファー サイズは、null 終端文字用にスペースが予約されるため、幅指定より 1 つ以上大きくする必要があります。
書式指定文字列は、1 バイト文字とワイド文字のどちらの関数バージョンが使用されているかに関係なく、1 バイト文字またはワイド文字の入力を処理できます。 したがって、 scanf
関数と wscanf
関数で 1 バイト文字とワイド文字を読み取るには、次のように書式指定子を使用します。
文字を次のように読み取る場合 | 使用する関数 | 書式指定子は次のとおりです。 |
---|---|---|
1 バイト | scanf 関数 |
c 、 hc 、または hC |
1 バイト | wscanf 関数 |
C 、 hc 、または hC |
ワイド | wscanf 関数 |
c 、 lc 、または lC |
ワイド | scanf 関数 |
C 、 lc 、または lC |
scanf
関数と wscanf
関数で文字列をスキャンするには、型指定子 s
と S
ではなく、 c
と C
で上記の表を使用します。