-
「Functions HI-TECH C SCANF」の版間の差分
提供: HI-TECH C for CP/M Fan WIKI(JP)
(ページの作成:「<strong>SCANF,VSCANF</strong> ==概要== #include <stdio.h> int scanf(char * fmt, ...) int vscanf(char *, va_list ap); ==詳細== <strong>Scanf</strong>()はstdi...」) |
|||
9行目: | 9行目: | ||
==詳細== | ==詳細== | ||
− | <strong>Scanf</strong>()はstdinストリームからの整形された入力を"de-editing")します??一般的にストリームや文字列に対して使用可能な類似した関数があります。<strong>vscanf</strong>()は類似した関数ですが、連続した引数ではなく、引数リストへのポインタを取ります。このポインタは<strong>va_start</strong>()で初期化されるべきです。入力変換はfmt文字列で処理されます。一般的に整形された文字列は入力内の文字にマッチしなければいけません。しかし、整形文字列内のスペース文字は、入力内のゼロもしくはスペース、タブやnewlineの"ホワイトスペース文字" | + | <strong>Scanf</strong>()はstdinストリームからの整形された入力を"de-editing")します??一般的にストリームや文字列に対して使用可能な類似した関数があります。<strong>vscanf</strong>()は類似した関数ですが、連続した引数ではなく、引数リストへのポインタを取ります。このポインタは<strong>va_start</strong>()で初期化されるべきです。入力変換はfmt文字列で処理されます。一般的に整形された文字列は入力内の文字にマッチしなければいけません。しかし、整形文字列内のスペース文字は、入力内のゼロもしくはスペース、タブやnewlineの"ホワイトスペース文字"にマッチします。変換指定は%文字を使った形式を取り、オプションで代入抑制文字('*')、最大幅の数値、変換指定文字などが後に続きます。どの変換指定も代入抑制文字と連携することなく、次の引数によって変数の位置が指定されて、値が割り当てられます。fmt文字列による二つの変換指定があるときは2つの追加の位置指定引数が必要です。変換文字列は以下の通りです。 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
;o x d | ;o x d | ||
− | : | + | :ホワイトスペースをスキップし、8,16,10進数の数をそれぞれ変換します。幅指定が供給されると、入力からできるだけ多くの文字を取ります。最初のマイナス符号は認識されます。 |
;f | ;f | ||
− | : | + | :ホワイトスペースをスキップし、浮動小数点数を伝統的?、科学的表記で変換します。幅指定に関しては上記と同様に適用されます。 |
;s | ;s | ||
− | : | + | :ホワイトスペースをスキップし、ホワイトスペース文字以外の文字の連続を最大限の長さでコピーします。ポインタ引数はcharへのポインタである必要があります。幅指定に関してはコピーされた文字数に限られます。結果的に生じた文字列はヌル終端になります。 |
− | |||
;c | ;c | ||
− | : | + | :入力から次の文字をコピーします。ポインタ引数はcharへのポインタであると仮定されます。幅指定があると、多くの文字がコピーされます。ホワイトスペースは文字列の連続を終端しない点でs形式とは違います。 |
− | + | 変換文字であるo, x, u, d, fは、対応する引数ポインタがlongかdoubleか適切に示すlに先行します。先行するhはポインタ引数がintではなく、shortであることを示します。 | |
<strong>Scanf</strong>()は変換が成功した数を返します。 | <strong>Scanf</strong>()は変換が成功した数を返します。 |
2018年1月5日 (金) 09:59時点における最新版
SCANF,VSCANF
概要
#include <stdio.h> int scanf(char * fmt, ...) int vscanf(char *, va_list ap);
詳細
Scanf()はstdinストリームからの整形された入力を"de-editing")します??一般的にストリームや文字列に対して使用可能な類似した関数があります。vscanf()は類似した関数ですが、連続した引数ではなく、引数リストへのポインタを取ります。このポインタはva_start()で初期化されるべきです。入力変換はfmt文字列で処理されます。一般的に整形された文字列は入力内の文字にマッチしなければいけません。しかし、整形文字列内のスペース文字は、入力内のゼロもしくはスペース、タブやnewlineの"ホワイトスペース文字"にマッチします。変換指定は%文字を使った形式を取り、オプションで代入抑制文字('*')、最大幅の数値、変換指定文字などが後に続きます。どの変換指定も代入抑制文字と連携することなく、次の引数によって変数の位置が指定されて、値が割り当てられます。fmt文字列による二つの変換指定があるときは2つの追加の位置指定引数が必要です。変換文字列は以下の通りです。
- o x d
- ホワイトスペースをスキップし、8,16,10進数の数をそれぞれ変換します。幅指定が供給されると、入力からできるだけ多くの文字を取ります。最初のマイナス符号は認識されます。
- f
- ホワイトスペースをスキップし、浮動小数点数を伝統的?、科学的表記で変換します。幅指定に関しては上記と同様に適用されます。
- s
- ホワイトスペースをスキップし、ホワイトスペース文字以外の文字の連続を最大限の長さでコピーします。ポインタ引数はcharへのポインタである必要があります。幅指定に関してはコピーされた文字数に限られます。結果的に生じた文字列はヌル終端になります。
- c
- 入力から次の文字をコピーします。ポインタ引数はcharへのポインタであると仮定されます。幅指定があると、多くの文字がコピーされます。ホワイトスペースは文字列の連続を終端しない点でs形式とは違います。
変換文字であるo, x, u, d, fは、対応する引数ポインタがlongかdoubleか適切に示すlに先行します。先行するhはポインタ引数がintではなく、shortであることを示します。
Scanf()は変換が成功した数を返します。 変換がされる前にend-of-fileがあった場合はEOFが返されます。例は以下の通りです。
scanf("%d %s", &a, &s) with input "12s" will assign 12 to a, and "s" to s.
scanf("%4cd %lf", &c, &f) with input " abcd -3.5" will assign " abc" to c, and -3.5 to f.
参照
fscanf, sscanf, printf, va_arg
編集者からの注
は元のテキストでは抜けていたので、このWIKIでは修正しました。