fprintf

[機能]

  ストリームに書式化して出力します.成功すれば,出力した文字数を返します.

[形式]
#include <stdio.h>

int fprintf(FILE *stream, const char *format [,argument list])
	stream   : FILE 構造体へのポインタ
	format   : フォーマット
	argument : 引数(出力したい変数等のリスト)

format は,
	1)一般の文字:そのまま出力されます
	2)エスケープシーケンス:その記号によって,対応する処置が執られます
			\a : ビープ音(警告)
			\b : バックスペース
			\f : フォームフィード(ページ替え)
			\n : 改行
			\r : 復帰
			\t : 水平タブ
			\v : 垂直タブ
			\' : 単一引用符
			\" : 2 重引用符
			\\ : 円マーク
			\? : 疑問符
			\ooo : 8 進表記の ASCII 文字
			\xhhh : 16 進表記の ASCII 文字
	3)フォーマット指定:引数をどのように出力するかを決めます
の 3 つから構成されます.

フォーマット指定は,常に % 記号で始まり,一般的には次のような形をして
います.
	%[flags][width][.precision][{h|l|ll|L}]type
例えば,
	%+10.3lf
は,浮動小数点数を出力するため(最後の f がそれを意味している)のフォ
ーマット指定であり,+ か - の符号を必ず付け( + ),出力幅は 10 桁
( 10 ),小数点以下は 3 桁まで表示( .3 )し,この数が倍精度である( l )
ことを意味しています.

type は必須の項目で,出力する引数が文字か,数値か等を決定します.
以下に示すような種類があります.
	文字  データ型  出力フォーマット
	d     int       符号付き 10 進数
	i     int       符号付き 10 進数
	u     int       符号無し 10 進数
	o     int       符号無し 8 進数
	x     int       符号無し 16 進数( abcdef )
	X     int       符号無し 16 進数( ABCDEF )
	f     double    [-]ddd.ddd.全体の出力文字数は width,また小数点以
	                下の桁数は .precision で決まります.
	e     double    [-]d.dddde[+|-]ddd.全体の出力文字数は width (符号
	                や e[+|-]ddd の項も含まれることに注意してください),
	                また小数点以下の桁数は .precision で決まります.
	E     double    [-]d.ddddE[+|-]ddd
	g     double    f または e フォーマットの内,短い方で出力( g )
	G     double    f または E フォーマットの内,短い方で出力( G )
	c     int       1 個の文字
	s     文字列    最初の NULL 文字( '\0' )まで,または,.precision で指
	                定された範囲まで表示されます.

flags は,出力位置の調整等を行い,以下の種類があります.
	-     指定された出力幅内で結果を左詰めにします(デフォルトは右詰め
	      です)
	+     出力が符号付きの場合は,値の前に必ず + か - を付けます(デフォ
	      ルトは,負の場合だけ - 記号を付けます)
	0     左側の空白に 0 が埋められます.

width は,出力する最小限の文字数を指定します.

precision は出力するデータ型によって以下のような意味を持って
います.
	diuoxX  表示される最小限の桁数を表します.出力文字数がこの桁数より
	        少ない場合は,左側に 0 が充填されます.
	eEf     小数点以下の桁数を指定します.
	gG      出力される最大限の有効桁数を指定します
	s       出力される最大限の文字数を指定します.この値を超えた文字は
	        出力されません.

h,l, ll,L は,以下のように,引数のサイズを規定します
	h     引数が,short int であることを示します
	l     引数が,long int であることを示します
	ll    引数が,long long int であることを示します
	L     引数が,long double であることを示します
		
[使用例]

  1. 数字や文字を様々な形式でファイルに出力します
    #include <stdio.h>
    
    int main()
    {
    	char ch = 'h';
    	char *string = "computer";
    	int i1 = 123;
    	int i2 = -10;
    	long l1 = -20;
    	int hex = 0x10;
    	int oct = 010;
    	int dec = 10;
    	double fp = 25.736;
    	FILE *stream;
    /*
    		 ファイルのオープン
    */
    	stream = fopen("data", "w");
    /*
    		 整数
    */
    	fprintf(stream, "整数\n");
    	fprintf(stream, "%5d %+5d %5d %+5d\n", i1, i1, i2, i2);
    	fprintf(stream, "%10ld %010ld %10lu %lo %lx\n", l1, l1, l1, l1, l1);
    /*
    		 文字
    */
    	fprintf(stream, "文字\n");
    	fprintf(stream, "%10c%5c\n", ch, ch);
    /*
    		 文字列
    */
    	fprintf(stream, "文字列\n");
    	fprintf(stream, "%25s\n%25.4s\n", string, string);
    /*
    		 実数
    */
    	fprintf(stream, "実数\n");
    	fprintf(stream, "%15f %15.2f %e %E\n", fp, fp, fp, fp);
    /*
    		 16進,8進,10進
    */
    	fprintf(stream,"16進,8進,10進\n");
    	fprintf(stream,"%10i %10i %10i\n", hex, oct, dec);
    
    	return 0;
    }
    			
    (出力) -ファイルの内容-
    整数
      123  +123   -10   -10
           -20 -000000020 4294967276 37777777754 ffffffec
    文字
             h    h
    文字列
                     computer
                         comp
    実数
          25.736000           25.74 2.573600e+01 2.573600E+01
    16進,8進,10進
            16          8         10
    			
[参照]

printf, sprintf, scanf, fscanf, vfprintf, vsprintf, vprintf

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引