Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 入出力ライブラリ」です。
ここで紹介する出力関数は、int型やdoubl型などの変数に格納されている値を書式制御文字列に従い、文字列に編集して出力します。
fprintf関数はファイルポインタに対応したファイルに、書式制御文字列に従い編集した文字列を出力します。
形式 | #include <stdio.h> int fprintf(FILE *fp, const char *format, ...); |
---|---|
返り値 | 出力できた場合は出力文字数を返します。エラーが発生した場合は負の値を返します。 |
引数 |
|
第2引数のformat(書式制御文字列)は「%(パーセント)」で始まり、「フラグ」、「最小フィールド幅」、「精度」、「長さ修飾子」、「変換指定子」が続きます。%と変換指定子以外は省略可能です。なお、これら以外の文字は、そのまま出力します。
フラグ | 意味 |
---|---|
+ | 常に符号(+か-)を出力します。デフォルトでは負の場合のみ出力します。 |
- | 左詰めで出力します。 |
0 | 0埋めで出力します。 |
1個の半角スペース | 正の数字の前に空白を出力します。 |
# | 変換指定子により、次のような意味になります。
|
変換指定子 | 意味 |
---|---|
c | 文字として出力します。出力するデータの型はint型または、char型です。最小フィールド幅以外は意味を持ちません。 |
d、i | 符号つき十進整数として出力します。出力するデータの型はint型、short型、long型ですが、short型の場合は長さ修飾子にhを、long型の場合はlを指定する必要があります。 精度を指定した場合は、指定した桁数は必ず出力されますが、変換後の値が指定された桁数に足りない場合は、左側が0で埋められます。デフォルトの精度は1です。なお、0を表示しようとした時に、明示的に精度として0が指定されていると、出力は空文字列になります。 |
e、E | 符号つき十進浮動少数点数を指数形式で出力します。出力するデータの型はdouble型または、long double型ですが、long double型の場合は長さ修飾子にLを指定する必要があります。 eとEの相違は、指数を表すEが英大文字か英小文字かだけです。 |
f | 符号つき十進浮動少数点数を小数点を用いて出力します。出力するデータの型はfloat型、double型、long double型ですが、long double型の場合は長さ修飾子にLを指定する必要があります。float型の場合はdouble型に変換されます。 小数点の後の桁数は、精度で指定された値となりますが、精度として明示的に0が指定された場合は、小数点以下は表示されません。また、小数点を表示する際には、小数点の前に少なくとも一桁は数字が表示されます。精度が指定されていない場合には6として扱われます。 |
g、G | 符号つき十進浮動少数点数を指数形式または、小数点を用いて出力します。上記、e、E、fとの相違は変換する値の大きさにより、出力形式が変わることです。 |
n | これまでに出力された文字数をint型のポインタ変数の引数に整数値として保存します。 |
o、u、x、X | unsigned int型の値を符号なし八進数(o)、符号なし十進数(u)、符号なし十六進数(xとX)として出力します。xは英小文字で、Xは英大文字で出力します。また、精度指定があれば精度で指定した桁数は必ず出力され、変換後の値が指定された桁数に足りない場合は、左側が0で埋められます。 |
s | char型の配列を文字列としてを出力します。配列中の文字は終端のヌル文字(`\0')の前まで出力されます。ただし、精度が指定されていると指定された文字数だけ出力します。(この場合はヌル文字は無くてもかまいません) |
p | void *型(void型のポインタ)を十六進数で出力します。 |
浮動小数点実数値を出力する場合の書式はfloat型もdouble型も「%f」です。fscanf系の関数の場合と異なりますので注意して下さい。
printf関数は書式制御文字列に従い編集した文字列を標準出力に出力します。fprintf関数との相違は出力が標準出力に限定されていることだけです。
形式 | #include <stdio.h> int printf(const char *format, ...); |
---|---|
返り値 | fprintf関数と同じです。 |
引数 |
|
sprintf関数は書式制御文字列に従い編集した文字列を引数に指定した変数に設定します。fprintf関数との相違は出力がchar型の配列に限定されていることだけです。
形式 | #include <stdio.h> int sprintf(char *str, const char *format, ...); |
---|---|
返り値 | fprintf関数と同じです。 |
引数 |
|
下記のような,(コンマ)で区切って、番号・体重・身長・血液型のデータが登録されているex14_1_6.datファイルを入力して標準出力に編集出力します。ただし、血液型は出力しませんので入力しません。
$ ./ex14_1_7.prg 番号 体重 身長 001 67.0 188.0 002 98.0 176.5 003 43.2 156.5 004 55.5 167.5 005 75.7 166.5