入力された値が、可変個引数の部分に指定したメモリアドレスへ格納される。
入力が得られなかった場合や、表現できない文字が入力された場合は入力エラーが発生する。また、型が不適切であるような、不適切な入力が起こると照合エラーが発生する。
引数format の基本形式は、“%d” や “%s”
といったように、指定の開始を意味する
%記号と、変換指定子の組み合わせである。この指定の組み合わせ1つにつき、引数…
の個数を1つ増やす。
変換指定子には以下のものがある。
d |
符号付き 10進整数。 |
i |
符号付き整数。
printf系の関数にある i変換指定子と異なり、d
とは意味が違うことに注意。d が 10進整数のみ受け付けるのに対し、i は
先頭に 0 や 0x が付加された 8進数や 16進数の値も受け付ける。 |
u |
符号無し 10進整数 |
o |
符号無し 8進整数 |
x |
符号無し 16進整数。
a-f が大文字・小文字のいずれであるかは問わない。したがって、printf系の関数にあるような X指定は無い。 |
f、e、g |
符号付き
10進浮動小数点数。科学的記数法でも構わない。
printf系の関数と異なり、f、e、g
はいずれもまったく同じものである。 |
a |
f、e、g の各変換指定子と同一。
printf系の関数で a
が追加されたことに合わせて導入されたと思われる。 |
c |
文字 |
s |
文字列 |
p |
ポインタの表現形式に従って、void**型の実引数へ格納する。
たとえば、sprintf関数の
%p変換で、配列にポインタの値を文字列化した後、sscanf関数の %p変換で
void*型の変数へ再変換できる。 |
n |
この変換指定が現れるまでに入力された文字数に変換され、対応する実引数(整数変数へのポインタでなければならない)に格納する。 |
[ |
受け付けるべき文字を限定的にした文字列変換。“%[”
から “]” の間に、受け付ける文字を書き並べる。
たとえば、“%[abc]” という指定によって、‘a’、‘b’、‘c’
いずれかの文字で構成された文字列が、変数へ格納される。
また、[ の直後に ^
を置くことによって、書き並べた文字以外を受け付けるという否定的な意味に変わる。たとえば、“%[^abc]”
とすれば、‘a’、‘b’、‘c’
以外の文字で構成された文字列が、変数へ格納される。 |
% |
“%%” というように
2つ並べることによって、%記号1つに変換される。 |
指定開始文字% の直後に、*
を置いた場合、変数への格納が抑制される。たとえば、“%*d %s”
という指定に対して、「100 abc」という入力がなされた場合、%d
指定の効果によって、100 は読み取られるが、変数への格納は行われず、後続の
%s変換へ進む。
任意で *
を置いた直後には、最大フィールド幅の指定を置いても良い。これは、10進整数で指定し、変換結果が最大で何文字分の幅を取るかを意味する。たとえば、“%10s”
という指定によって、文字列を 10文字分まで読み取る。
任意で最大フィールド幅の指定を置いた直後には、変換修飾子を置いても良い。これには、以下のものがある。これらの指定は、変換指定子が
n
の場合には、対応する実引数が、どのような型へのポインタであるかを指示するという意味になる。
l |
整数を変換する際、対象の型が long型または
unsigned long型であることを指示する。また、変換指定子が n
の場合は、対応する実引数の型が long* であることを指示する。
文字や文字列の場合( %[指定も含まれる)には、対象の型が wchar_t型であることを指示する。
浮動小数点数の場合には、対象の型が
double型であることを指示する。特に、このケースは、printf系の関数では必要とされないが、scanf系の関数では必要であることに注意。 |
ll |
整数を変換する際、対象の型が
long long型または unsigned
long long型であることを指示する。また、変換指定子が n
の場合は、対応する実引数の型が long long* であることを指示する。
浮動小数点数の場合には、対象の型が long
double型であることを指示する。特に、このケースは、printf系の関数では必要とされないが、scanf系の関数では必要であることに注意。 |
h |
整数を変換する際、対象の型が short型または
unsigned short型であることを指示する。また、変換指定子が n
の場合は、対応する実引数の型が short* であることを指示する。 |
hh |
整数を変換する際、対象の型が char型または
unsigned char型であることを指示する。また、変換指定子が n
の場合は、対応する実引数の型が char* であることを指示する。 |
L |
浮動小数点数を変換する際、対象の型が long
double型であることを指示する。 |
j |
整数を変換する際、対象の型が intmax_t型または uintmax_t型であることを指示する。また、変換指定子が
n の場合は、対応する実引数の型が intmax_t* であることを指示する。 |
z |
整数を変換する際、対象の型が size_t型であることを指示する。また、変換指定子が
n の場合は、対応する実引数の型が size_t* であることを指示する。 |
t |
整数を変換する際、対象の型が ptrdiff_t型であることを指示する。また、変換指定子が
n の場合は、対応する実引数の型が ptrdiff_t* であることを指示する。 |
変換修飾子の直後には、変換指定子が来る。これは省略できない。
引数format の中で、空白類文字(半角スペースやタブ文字)は、複数の連続した空白類文字を無視することを表す。1文字の空白類文字を読み飛ばす目的で、“%d
%d”
のように、1文字の空白類文字を挟み込んでも、入力された文字列内で連続していれば、すべての空白類文字は読み飛ばされる。
変換指定と合致しない内容の入力が現れた場合、その時点で関数は終了する。
|