[問1] あるファイルtest.datの中にテキストで実数が羅列されている。この実数を読み込んで表示するプログラムkadai10-1.cを作ってみよう。
kadai10-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)を以下の仕様を満たすように定義し、kadai10-1.cを完成させなさい。
読み込むファイルはscanfにてキーボード入力するが、このとき、 /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 kadai10-1.c
./a.out
1.000000
1.136735
1.010000
1.137647
.....
W+WVj++8kV0g44GC44KL44OV44Kh44Kk44OrdGVzdC5kYXTjga7kuK3jgavjg4bjgq3jgrnjg4jjgaflrp/mlbDjgYznvoXliJfjgZXjgozjgabjgYTjgovjgILjgZPjga7lrp/mlbDjgpLoqq3jgb/ovrzjgpPjgafooajnpLrjgZnjgovjg5fjg63jgrDjg6njg6BrYWRhaTEwLTEuY+OCkuS9nOOBo+OBpuOBv+OCiOOBhuOAggprYWRhaTEwLTEuY+OBp+OBr+asoeOBruOCiOOBhuOBqm1haW4oKeOCkuWumue+qeOBl+OBn+OBqOOBmeOCi+OAggoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgZGlzcGxheV9maWxlKEZJTEUgKmZwKTsKCmludCBtYWluKCkgewogICAgICAgIGNoYXIgSU5GSUxFTkFNRVsxMDBdOyAvL+ODleOCoeOCpOODq+WQjeOCkuagvOe0jeOBmeOCi+aWh+Wtl+WIlwogICAgICAgIEZJTEUgKmluX2ZwOwogICAgICAgIHNjYW5mKCIlcyIsIElORklMRU5BTUUpOyAvL+ODleOCoeOCpOODq+WQjeOCkuOCreODvOODnOODvOODieWFpeWKmwogICAgICAgIGluX2ZwID0gZm9wZW4oSU5GSUxFTkFNRSwgInIiKTsgLy/jg5XjgqHjgqTjg6vjgpLplovjgY8KICAgICAgICBpZiAoaW5fZnAgPT0gTlVMTCkgey8v44OV44Kh44Kk44Or44GM6ZaL44GR44Gq44GE5aC05ZCI44GvaW5fZnDjgYxOVUxM44Gr44Gq44KL44CCKOODleOCoeOCpOODq+OBjOimi+S7mOOBi+OCieOBquOBhOaZguetiSkKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSSBjYW5ub3Qgb3BlbiAlc1xuIiwgSU5GSUxFTkFNRSk7Ly/mqJnmupbjgqjjg6njg7zlh7rlipvjgavjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrjjgpLlh7rlipsKICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgfQoKICAgICAgICBkaXNwbGF5X2ZpbGUoaW5fZnApOyAvL+ODleOCoeOCpOODq+OBruS4rei6q+OCkuWFqOmDqOeUu+mdouihqOekuuOBmeOCi+mWouaVsAogICAgICAgIGZjbG9zZShpbl9mcCk7IC8v44OV44Kh44Kk44Or44KS6ZaJ44GY44KLCn0KCuKXiyAg5LiK6KiYbWFpbumWouaVsOOBruS4reOBriB2b2lkIGRpc3BsYXlfZmlsZShGSUxFICpmcCnjgpLku6XkuIvjga7ku5Xmp5jjgpLmuoDjgZ/jgZnjgojjgYbjgavlrprnvqnjgZfjgIFrYWRhaTEwLTEuY+OCkuWujOaIkOOBleOBm+OBquOBleOBhOOAggroqq3jgb/ovrzjgoDjg5XjgqHjgqTjg6vjga9zY2FuZuOBq+OBpuOCreODvOODnOODvOODieWFpeWKm+OBmeOCi+OBjOOAgeOBk+OBruOBqOOBjeOAgSAvdXNyNC95YW1hdWNoaS95YW1hdWNoaS9kYXRhL3Rlc3QuZGF0IOOCkuaMh+WumuOBmeOCi+OAguOBk+OCjOOCkuihqOekuuOBmeOCi+OBqOOAgQogIDEuMDAwMDAwICAxLjEzNjczNQogIDEuMDEwMDAwICAxLjEzNzY0NwogIDEuMDIwMDAwICAxLjEzNzE0MwogIDEuMDMwMDAwICAxLjEzNzk1NwogIDEuMDQwMDAwICAxLjE0MjY0MQogIDEuMDUwMDAwICAxLjE1MzEwMQouLi4uLgrjgajmlbDlgKTjgYwx6KGM44GrMuWAi+OBmuOBpOWIl+aMmeOBleOCjOOBpuOBhOOCi+OAguOBk+OCjOOCieOBruODh+ODvOOCv+OCkuiqreOBv+WPluOBo+OBpgoKIDEuMDAwMDAwCiAxLjEzNjczNQogMS4wMTAwMDAKIDEuMTM3NjQ3Ci4uLgrjga7jgojjgYbjgasx6KGM44Gr77yR44Gk44Ga44Gk5pWw5YCk44KS5YiX5oyZ44GZ44KL44KI44GG44Gr5a6a576p44GX44Gq44GV44GE44CC5L2G44GX44CB44OV44Kh44Kk44Or44Od44Kk44Oz44K/44O844GM44OV44Kh44Kk44Or44Gu5pyA5b6M44GL5ZCm44GL44KS5Yik5a6a44GZ44KL6Zai5pWw44Go44GX44GmCmludCBmZW9mKEZJTEUgKmZwKeOBjOa6luWCmeOBleOCjOOBpuOBhOOCi+OAguOBk+OBruS9v+OBhOOBi+OBn+OBr+asoeOBp+iqv+OBueOCiOOAggptYW4gZmVvZgrjgZnjgovjgajjgIHkvb/nlKjmlrnms5XjgYzooajnpLrjgZXjgozjgovjgIIKCuWun+ihjOS+i++8mgpnY2Mga2FkYWkxMC0xLmMKLi9hLm91dAoxLjAwMDAwMAogMS4xMzY3MzUKIDEuMDEwMDAwCiAxLjEzNzY0NwouLi4uLgo=