ファイルからの読み取り
ファイルからデータを読み取るときは、fscanf関数が使えます。
int fscanf(FILE *fp,const char *format,...);
第一引数にファイルポインタを指定します。第2引数以降は通常のscanf関数と同じです。
もう一つ関数を紹介します。
int fgetc(FILE *fp);
この関数は、ファイルから一文字読み取り、int型に変換して返します。ファイルの最後に到達した場合は、EOFを返します。EOFとはEnd Of Fileの略で、定数マクロとして定義されています。何文字も読み取りたい場合は、この関数を繰り返し呼び出します。
ファイルへの書き込み
ファイルに書き込む場合は、fprintf関数を用います。
int fprintf(FILE *fp,const char *format,...);
printf関数の引数にファイルポインタが加わっただけです。第一引数にファイルポインタを指定し、第2引数以降はprintf関数と同じようにフォーマット指定子を用いて文字列や数値などを指定します。
puts関数のファイル版として、fputs関数もあります。
int fputs(const char *string,FILE *fp);
こちらは、第2引数にファイルポインタが加わりました。ちなみに、fputs関数はputs関数と違って末尾に改行しません。
サンプルコード
まずはファイルに書き込むプログラムを作ります
#include <stdio.h>
#include <stdlib.h>
int main(void){
char fname[500];
FILE *fp;
puts("ファイルのパスを入力してください");
scanf("%s",fname);
fp=fopen(fname,"w");
if (fp==NULL){
puts("ファイルを開けません。");
return -1;
}
fputs("Hello,world\n",fp);
fclose(fp);
return 0;
}
実行結果1
ファイルのパスを入力してください
test.txt
test.txtの内容
Hello,world
このように、ファイルに文字を書き込めました。
次に、ファイルを開いて中身を読み取り、画面に表示します。
test.txtの内容
Hello,world
#include <stdio.h>
#include <stdlib.h>
int main(void){
char fname[500];
int data;
FILE *fp;
puts("ファイルのパスを入力してください");
scanf("%s",fname);
fp=fopen(fname,"r");
if (fp==NULL){
puts("ファイルを開けません。");
return -1;
}
do {
data=fgetc(fp);
printf("%c",data);
} while(data!=EOF);
fclose(fp);
return 0;
}
実行結果
ファイルのパスを入力してください
test.txt
Hello,world
まとめ
標準入出力に対して操作を行うprintf関数、scanf関数に対応してfprintf関数、fscanf関数があり、これらを使うとファイルに対して入出力ができる。
コメント