vfprintf

[機能]

  ストリームに書式化して出力します.fprintf 関数と異なり,引数並びではなく,引数並びへのポインタを受け取ります.引数並びへのポインタに関しては,可変個数の引数を扱う関数 va_arg を参照して下さい.成功すれば,出力した文字数を返します.

[形式]
	#include <stdio.h>
	#include <stdarg.h>

	int vfprintf(FILE *stream, const char *format, va_list arg)
		stream : FILE 構造体へのポインタ
		format : フォーマット( printf 参照)
		arg    : 引数並びへのポインタ
		
[使用例]

  1. 可変個数の引数の値を出力します
    #include <stdio.h>
    #include <stdarg.h>
    #include <string.h>
    
    double average(double first, ...);
    
    char buf[100];
    
    int main()
    {
    	double mean;
    
    	mean = average(1.0, 2.0, 3.0, 9.0, -1.0);
    
    	printf("%s", buf);
    	printf("   平均値は %5.2f\n", mean);
    
    	return 0;
    }
    
    double average(double first, ...)
    {
    	double sum;
    	double d = first;
    	int count = 1;
    	char form[100];
    	va_list marker, marker_o;
    
    	strcpy(form, " ");
    	printf("data %5.1f", first);
    
    	sum = 0.0;
    
    	va_start(marker, first);                /* 可変個引数の初期化 */
    	marker_o = marker;
    
    	while (d >= 0.0) {
    		sum += d;
    		d = va_arg(marker, double);         /* 次の引数の取得 */
    		if (d >= 0.0) {
    			strcat(form, "%5.1f ");
    			count ++;
    		}
    	}
    
    	strcat(form, "\n");
    	vsprintf(buf, form, marker_o);
    
    	va_end(marker);                         /* 可変個引数のreset */
    
    	return (sum / count);
    }
    			
    (出力) -ファイルの内容-
    data   1.0   2.0   3.0   9.0 
       平均値は  3.75
    			
[参照]

fprintf, vsprintf, vprintf, va_arg

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