fprintについてもう少し詳しく書きます・・・。
と言ってもほとんど書くことないんですけどね・・・。
fprintfはprintfとほとんど同じと考えてよいです。
以下のprintfを使用した例を見てください。
////////////////サンプル1///////////////////////////////////////
#include <stdio.h>
int main()
{
int years=2004;
printf("Hello Densanbu\n");/*ファイルに書き込みます。*/
printf("%d年\n",years);
return 0;
}
////////////実行結果////////////////////////////////////////
Hello Densanbu
2004年
Press any key to continue
////////////////////////////////////////////////////////
簡単に画面に出力できましたよね?
それではfprintfを使って今出力した文字列をファイルに出力してみましょう。
/////////////サンプル2//////////////////////////////////
#include <stdio.h>
int main()
{
FILE *fp;/*ファイルポインタ*/
int years=2004;
fp = fopen("test.txt","w"); /*ファイルを開きます。*/
if(fp==NULL)/*エラー処理*/
{
printf("ファイルが読み込めません。\n");
return 0;
}
fprintf(fp,"Hello Densanbu\n");/*ファイルに書き込みます。*/
fprintf(fp,"%d年\n",years);
fclose(fp); /*ファイルを閉じます。*/
return 0;
}
///////////////////////////////////////////////////////
text.txtに
Hello Densanbu
2004年
と書き込まれていれば成功です。
ようするにfprintfを使う前後にfopenでファイルを開き、fcloseでファイルを閉じればいいわけです。
ファイルに書き込むのでfopenには"w"を指定します。
そして、fprintfの第一引数に出力先であるファイルのポインタを入れればいいだけです。
おまけ、
ファイルポインタにstdoutと指定するとprintfと同じように画面に出力できます。
stdoutは標準出力、つまり通常はディスプレイを指します。
stdoutはプログラムが開始すると自動的に開かれ、終了時に閉じられます。
ので、stdoutを使うときは fopenもfcloseもいりません。
よって、printf("Densan\n"); も fprintf(stdout,"Densan"); も同じ処理をします。
応用問題
scanfで学生の名前,数学・国語・英語のテストの点数をそれぞれ入力させ、
fprintfを使ってそれらとテストの合計点を"test.txt"というファイルに書き込むプログラムを作ってください。
(学生のテストの点数表みたいなもの)
例:
#include <stdio.h>
int main()
{
int kokugo,suugaku,eigo,goukei;
char name[16];
FILE *fp;/*ファイルポインタ*/
/*データ入力*/
printf("名前(10文字以内)>");
scanf("%s",name);
printf("国語>");
scanf("%d",&kokugo);
printf("数学>");
scanf("%d",&suugaku);
printf("英語>");
scanf("%d",&eigo);
goukei=kokugo+suugaku+eigo;
/*ファイルを開く*/
fp=fopen("test.txt","w");
if(fp==NULL)/*エラー処理*/
{
printf("ファイルが開けません。");
return 0;
}
/*ファイルに書き込む。*/
fprintf(fp," 名前 国語 数学 英語 合計点\n");
fprintf(fp,"%10s %4d %4d %4d %6d\n",name,kokugo,suugaku,eigo,goukei);
/* %Xs Xは文字数の制限 最低でもX文字(桁)出力する。
ちなみに %.Ys とすると最大でもY文字(桁)出力する。*/
fclose(fp);/*ファイルを閉じる。*/
return 0;
}