Light C | ← → 目次 索引 |
sscanf、vsscanf、scanf などの関数では、% を使用して、入力するデータの書式を指定します。たとえば、次のようになります。
char a[10]; | ||
int i, j; long li; | ||
float f; double d; | ||
sscanf( "ABC", "%s", a ); | // a[]="ABC" | |
sscanf( "ABC", "%2s", a ); | // a[]="AB" | |
sscanf( "ABC", "%c", a ); | // a[0]='A' | |
sscanf( "ABC", "%2c", &a ); | // a[0]='A', a[1]='B' | |
sscanf( "123", "%d", &i ); | // i=123 | |
sscanf( "123", "%2d", &i ); | // i=12 | |
sscanf( "1,2", "%d,%d", &i, &j ); | // i=1, j=2 | |
sscanf( "123", "%ld", &li ); | // li=123 | |
sscanf( "314e-2", "%f", &f ); | // f=3.14 | |
sscanf( "314e-2", "%lf", &d ); | // d=3.14 | |
sscanf( "AAABBC", "[AB]", a ); | // a="AAABB" (簡易正規表現) |
入力変換指定子の構文は、次のとおりです。
%[*][width][modifier]type
入力変換指定子の構文は、多くの点で出力変換指定子を同じです。 modifier と type により、sscanf 関数などの引数に指定する変数の型が決まります。次はその例です。
指定 | 型 |
---|---|
d,i,u,x | int* または unsigned* |
ld,li,lu,lx | long* または unsigned long* |
f,e,g | float* |
lf,le,lg | double* |
c,s | char* |
C,S | wchar_t* |
n | int* |
p | void** |
Fp | void far** |
Np | void near** |
Fd | int far* |
Nd | int near* |
% の直後に * を指定すると、そのデータは、変数に格納されずに読み飛ばされます。この場合、対応するアドレスを scanf などの引数に渡す必要はありません。
例 | int i; | |
sscanf( "1,2,3", "%*d,%*d,%d", &i ); | // i=3 |
入力データの最大バイト数を 10 進文字列で指定します。type が p の場合は無視されます。
例 | int a, b, c; | |
sscanf( "12345", "%1d%2d%3d", &a, &b, &c ); | // a=1, b=23, c=45 |
指定 | 説明 |
---|---|
h | type で整数を指定する場合に、引数が int ではなく short へのポインタであることを示します。Light C では int と short が同一なので、効果はありません。 |
l | type が整数の場合は引数が int ではなく long へのポインタであることを示し、type が小数の場合は引数が float ではなく double へのポインタであることを示します。 |
L | type で小数を指定する場合に、引数が long double 型であることを示します。Light C では long double と double が同一なので、効果はありません。 |
F | 引数が far ポインタであることを示します。ただし、type が p の場合は、引数でポイントされるポインタが far であることを示します。 |
N | 引数が near ポインタであることを示します。ただし、type が p の場合は、引数でポイントされるポインタが near であることを示します。 |
文字列をどのような種類の値として解釈するかを指定します。
指定 | 解析される文字列の構文 | 説明 |
---|---|---|
d, i | [+|-]ddd | 文字列を符号付き 10 進数として解析し、結果を (long) int に格納します。 |
u | [+]ddd | 文字列を符号なし 10 進数として解析し、結果を (unsigned long) int に格納します。 |
X, x | [+][0x|0X]hhh | 文字列を 16 進数として解析し、結果を (unsigned long) int に格納します。文字列の先頭に 0x または 0X が付いていてもかまいません。 |
o | [+]ddd | 文字列を 8 進数として解析し、結果を (unsigned long) int に格納します。 |
q | [+]ddd | 文字列を 4 進数として解析し、結果を (unsigned long) int に格納します。[LC] |
b | [+]ddd | 文字列を 2 進数として解析し、結果を (unsigned long) int に格納します。[LC] |
p | hhh または hhh:hhh | ポインタ値の表現を読み込みます。small/medium モデルの場合と、modifier に N を指定した場合は、4 桁以下の 16 進数を入力し、near ポインタとして格納します。そうでない場合は、4 桁以下の 16 進数、コロン (:)、および 4 桁以下の 16 進数を順に入力し、far ポインタとして格納します。 |
s | [^ \t\n\v\f\r]... | ホワイトスペース以外のバイトを連続して入力し、末尾に 0 を付加して、結果を char [ ] に格納します。 |
c | (任意の n バイト) | 1 バイトを入力し、結果を char に格納します。width を指定した場合は、そのバイト数分のデータを連続して入力し、結果を char [ ] に格納します。 |
S | [^ \t\n\v\f\r]... | s と似ていますが、結果を wchar_t [ ] に格納する点が異なります。 |
C | c と似ていますが、結果を wchar_t または wchar_t [ ] に格納する点が異なります。 | |
f,e,g,E,G | [+|-][ddd][.ddd][{E|e}ddd] | 文字列を小数として解析し、結果を float または double に格納します。 |
n | これまでに入力したバイト数を int に格納します。 |
c と C 以外では、入力データ先頭のホワイトスペースは読み飛ばされます。
参照 出力変換指定子
Copyright © Tama Software Ltd, 1999-2012. | ← → 目次 索引 |