ここでは変数をテキスト形式でファイルに読み書きする方法について学びます。


1.fprintf 標準関数でテキストファイルに書き込む

変数の値をテキストとして画面に表示する時は printf を使いましたが、画面の代わりにファイルにテキストを出力したい時は printf の親戚である「fprintf 標準関数」を使います。

使い方は printf とほとんど同じで、違いは次のように書式の前にファイルポインタがあるだけです。

fprintf 標準関数の書式:

fprintf( ファイルポインタ、書式、変数1, 変数2,…)

書式: printf と同じ

戻り値: printf と同じ


(使用例)

FILE *fp = NULL;
char f[256] = "hoge.txt";
fp = fopen( f, "w" ); // もちろん書き込み(writing)モードでファイルをオープンする

int a = 123;
fprintf( fp, "hoge %d\n", a ); // hoge.txt に「hoge 123」を出力する

fclose(fp);


2.fscanf 標準関数でテキストファイルから読み込む

変数の値をキーボードからテキスト入力する時は scanf を使いましたが、キーボードの代わりにファイルからテキストを入力したい時は scanf の親戚である「fscanf 標準関数」を使います。

使い方は scanf とほとんど同じで、違いは次のように書式の前にファイルポインタがあるだけです。

fscanf 標準関数の書式:

※ fscanf 標準関数は scanf 標準関数と同じく使い方によっては危険な関数なので基本的に使わない方が良いです。代わりに C11 以降の「fscanf_s」を使うか「fgets」+「sscanf_s」を使った方が安全です。

fscanf( ファイルポインタ、書式、変数1のアドレス, 変数2のアドレス,…)

書式: scanf と同じ

戻り値: scanf と同じ (読み込みに失敗すると EOF 返る)


(使用例)

※ hoge.txt の中身は「hoge 123」とする。

FILE *fp = NULL;
char f[256] = "hoge.txt";
fp = fopen( f, "r" ); // もちろん読み込み(reading)モードでファイルをオープンする

int a;
fscanf( fp, "hoge %d", &a );

fclose(fp);

printf( "%d\n", a );  // 123 と表示される。

なお文字列も %s を使って読み込めますがセキュリティ的に「最高レベルで」危険なので、文字列を読み込むためには次のページで説明する fgets 標準関数を使います。