Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 入出力ライブラリ」です。
ここで紹介する入力関数は文字列を入力しますが、入力した文字列を書式制御文字列に従い型変換して、直接int型やdoubl型などの変数に格納します。格納する変数は引数で指定しますので、関数側から引数で指定した領域に値を設定することになります。従って、引数の受け渡しは「参照渡し」になります。参照渡しについては「9. プログラムの部品化のための関数(2/3)」をご覧下さい。
fscanf関数はファイルポインタに対応したファイルから入力た文字列を、書式制御文字列に従い型変換して、引数に指定した変数に設定します。
形式 | #include <stdio.h> int fscanf(FILE *fp, const char *format, ...); |
---|---|
返り値 | 入力できた場合は入力したデータの数を返します。ファイルの終端やエラーを検出した場合はEOFを返します。また、入力したデータが型変換できない場合(英字をint型に変換、等)は、その時点で入力を終了します。 |
引数 |
|
使用法、 他 |
返り値がEOF以外の場合は入力出来ましたが、期待したデータが全て入力できたかどうかは返り値をチェックする必要が有ります。 |
第2引数のformat(書式制御文字列)は「%(パーセント)」で始まり、「代入抑止フラグ」、「最大文字幅」、「サイズ指定子」、「変換指定子」が続きます。%と変換指定子以外は省略可能です。なお、これら以外の文字を指定した場合は、入力ストリーム中に一致した文字が現れると、それをスキップします。
変換指定子 | 型 | 説明 |
---|---|---|
d | int | 十進整数値に変換します。 |
i | int | 0xまたは、0Xで始まる場合は十六進数、0で始まる場合は八進数、その他の場合は十進数値として変換します。 |
o | unsigned int | 八進数値に変換します。 |
u | unsigned int | 十進数値に変換します。 |
xまたは、X | unsigned int | 十六進数値に変換します。 |
f | float | 浮動小数点数に変換します。(e、E、gも同じです) |
s | char型の配列 | 文字列に変換します。終端にはヌル文字('\0')が追加されます。なお、入力ストリーム中に、空白(スペースやタブ)が現れるか、最大文字幅に達した場合は文字列の入力は終了します。 |
c | char | 通常は1文字に変換します。ただし、最大文字幅を指定すれば指定した分の文字に変換します。なお、入力ストリーム中の空白は入力します。入力したくない場合は、書式制御文字列中に明示的にスペースを指定します。 |
[文字列] | char型の配列 | [文字列]中の文字に一致した文字または、不一致の文字を入力します。[文字列]の先頭に^(アクサンシルコンフレックス)を付けると、不一致を意味します。また、連続した文字の中の1文字は-(負記号)で指定ができます。(例えば、英大文字ならば[A-Z]の様に指定できます) |
p | voidへのポインタ | ポインタ値に変換します。 |
n | int | ここまでに入力された文字数を取得します。 |
浮動小数点数の入力は、float型として入力する場合の書式は「%f」ですが、double型として入力する場合は、サイズ指定子の「l」を付加して「%lf」になりますので注意して下さい。
scanf関数は標準入力から入力した文字列を書式制御文字列に従い型変換して、引数に指定した変数に設定します。fscanf関数との相違は入力が標準入力に限定されていることだけです。
形式 | #include <stdio.h> int scanf(const char *format, ...); |
---|---|
返り値 | fscanf関数と同じです。 |
引数 |
|
sscanf関数は文字列を書式制御文字列に従い型変換して、引数に指定した変数に設定します。fscanf関数との相違は入力がファイルではないことだけです。
形式 | #include <stdio.h> int sscanf(const char *str, const char *format, ...); |
---|---|
返り値 | fscanf関数と同じです。 |
引数 |
|
下記のような,(コンマ)で区切って、番号・体重・身長・血液型のデータが登録されているex14_1_6.datファイルを入力して標準出力に出力します。ただし、血液型は出力しませんのでスキップします。
$ ./ex14_1_6.prg 番号 体重 身長 1 67.00 188.00 2 98.00 176.50 3 43.20 156.50 4 55.50 167.50 5 75.70 166.50