あるファイルtest.datの中にテキストで実数が羅列されている。この実数を読み込んで表示するプログラムkadai12-1.cを作ってみよう。
kadai12-1.cでは次のようなmain()を定義したとする。
#include <stdio.h>
#include <stdlib.h>
void display_file(FILE *fp);
int main() {
char INFILENAME[100]; //ファイル名を格納する文字列
FILE *in_fp;
scanf("%s", INFILENAME); //ファイル名をキーボード入力
in_fp = fopen(INFILENAME, "r"); //ファイルを開く
if (in_fp == NULL) {//ファイルが開けない場合はin_fpがNULLになる。(ファイルが見付からない時等)
fprintf(stderr, "I cannot open %s\n", INFILENAME);//標準エラー出力にエラーメッセージを出力
exit(1);
}
display_file(in_fp); //ファイルの中身を全部画面表示する関数
fclose(in_fp); //ファイルを閉じる
}
○ 上記main関数の中の void display_file(FILE *fp)を以下の仕様を満たすように定義し、kadai12-1.cを完成させなさい。
読み込むファイルは上記プリプロセッサで定義されたFILENAMEにある.
これをcat して中身を見ると、
cat /usr4/yamauchi/yamauchi/data/test.dat
1.000000 1.136735
1.010000 1.137647
1.020000 1.137143
1.030000 1.137957
1.040000 1.142641
1.050000 1.153101
.....
と数値が1行に2個ずつ列挙されている。これらのデータを読み取って
1.000000
1.136735
1.010000
1.137647
...
のように1行に1つずつ数値を列挙するように定義しなさい。但し、ファイルポインターがファイルの最後か否かを判定する関数として
int feof(FILE *fp)が準備されている。この使いかたは次で調べよ。
man feof
すると、使用方法が表示される。
実行例:
gcc kadai112-1.c
./a.out
1.000000
1.136735
1.010000
1.137647
.....