[時間割:C言語]『はじめてのC言語完全入門』その13
2009/01/06 22:56 posted by kunkichi
火曜日は「C言語」。前回、ファイルからの入出をやったので、今度はファイルへの出力です。
はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
posted with amazlet at 08.08.19
塚越 一雄
技術評論社
売り上げランキング: 420963
技術評論社
売り上げランキング: 420963
- 書き込み時は、オープンモードを”w”にする。
FILE *ofp;
ofp = fopen("output.txt","w") - ファイルへの出力にはfputcを使う。
fput(c, ofp); - 書き込みの場合はエラー処理が重要。fputcは、EOFに達した場合も書き込みエラーの場合も両方-1を返すので、終了とエラーの区別ができない。よって、エラーが発生していたら真を返すferror関数を使って、「書き込みエラー」を取得する。
fputc(c,ofp);エラーが発生した場合に処理を終了する場合は、ファイルのクローズを忘れないように。
if(ferror(ofp)){
printf("書き込みに失敗しました。¥n");
fclose(ofp);
return XXX;
} - 前回のサンプルスクリプトに出力処理を追加。sample.txtを読み込んで、その内容をそのままresult.txtに出力する、いわばcpコマンドのような感じで。
#include <stdio.h>
#define INFILE "./sample.txt"
#define OUTFILE "./result.txt"
int main()
{
FILE *ifp;
FILE *ofp;
if( !(ifp = fopen( INFILE, "r" )) ){
printf("cannot open input file.\n");
return 255;
}
if( !(ofp = fopen( OUTFILE, "w" )) ){
printf("cannot open output file.\n");
return 255;
}
int c;
while( (c = fgetc(ifp)) != EOF ){
fputc(c,ofp);
}
if(ferror(ofp)){
printf("書き込みに失敗しました。\n");
fclose(ofp);
fclose(ifp);
remove(OUTFILE);
return 1;
}
if( fclose(ofp) ){
printf("cannot close output file.\n");
return 255;
}
if( fclose(ifp) ){
printf("cannot close input file.\n");
return 255;
}
return 0;
} - getcharを使うと、標準入力から1文字読み込むことができる。fgetcと同じように返り値はintで受ける。引数はなし。
- ferrorってイメージとしてはエラーフラグが立つという感じかな。whileのループの中でなく、ループが終了した後にチェックしているのはそういう意味かと。
- 上記はferrorで書き込みエラーを拾ったら、出力ファイルポインタをクローズすると共にファイルを削除している。削除にはremove(ファイル名)を使用する。Perlのunlinkみたいなもんかな。
- fputcは1文字単位なので、ちょっと使いにくい。だけど、fprintfを使えば、printfのように、文字列を特定の書式に当てはめる形で出力することができる。
fprintf(ofp,"今日は%d月%d日です。¥n", month, day);引数にファイルポインタを追加する以外はprintfと全く同じ使い方。 - fprintfを使ったファイル出力のサンプル
$ cat fprintf.cビルドして実行してみる。
#include <stdio.h>
#define OUTFILE "result.txt"
int main()
{
FILE *ofp;
if(!(ofp = fopen(OUTFILE,"w"))){
printf("cannot open outfile.\n");
return 255;
}
int num=0;
printf("数字を入力してください。 ");
scanf("%d",&num);
fprintf(ofp,"入力された数字は、%d です。\n",num);
fclose(ofp);
return 0;
}
$ ./fprintf
数字を入力してください。 356
$ cat result.txt
入力された数字は、356 です。 - 標準出力、標準エラー出力にも出力できる。それぞれ組み込みのファイルポインタである、stdout、stderr を fprintfの引数にすれば良い。エラーメッセージ等はstderrに出すと良いね。
ということでファイルの出力もできるようになりました。
次は文字列とポインタです。






コメント&トラックバック
トラックバックURL: