[問1] 前回の改題ではアスキーファイルの読み書きを学んだ。
今回は、前回のkadai10-2.c(前回の課題の問2)を改良して変換したデータを
バイナリ形式でファイルにsaveするkadai11-1.cを作ろう。
バイナリでデータsaveするにはfwrite()を使う。
ここではファイル名をプロトタイプ宣言で固定することにする。
以下のconvert_b()の抜けている部分を補ってバイナリーでデータを保存する
プログラムkadai11-1.cを作りなさい。
#include <stdio.h>
#include <stdlib.h>
#include INFILENAME "test.dat" //読み込むファイル名
#include OUTFILENAME "test-bin.dat" //保存ファイル名
void convert_b(FILE *in_fp, FILE *out_fp); //プロトタイプ宣言
int main() {
FILE *in_fp, *out_fp;
in_fp = fopen(INFILENAME, "r"); //ファイルを読み込みモードで開く
if (in_fp == NULL) {//ファイルが開けない場合はin_fpがNULLになる。
(ファイルが見付からない時等)
fprintf(stderr, "I cannot open %s\n", INFILENAME);
//標準エラー出力にエラーメッセージを出力
exit(1);
}
out_fp = fopen(OUTFILENAME, "w"); //ファイルを書き込みモードで開く
if (in_fp == NULL) {//ファイルが開けない場合はin_fpがNULLになる。
(ファイルが見付からない時等)
fprintf(stderr, "I cannot open %s\n", INFILENAME);
//標準エラー出力にエラーメッセージを出力
exit(1);
}
convert_b(in_fp,out_fp); //in_fpよりデータを読み込み、out_fpに結果をsaveする。
fclose(in_fp); fclose(out_fp); //ファイルを閉じる
}
void convert_b(FILE *in_fp, FILE *out_fp) {
float data1, data2;
while (!feof(in_fp)) {
......
fwrite(...., sizeof(float), ...., .....);
}
}
作成してみたkadai11-1.cが正しくできたかどうかはチェックプログラムが使えません。
そのままソースファイルをライブラリの
「プリプロセッサとファイル操作」の「バイナリファイルのsave」に投稿してください。
kadai10-2.cを以下に示す。
#include<stdio.h>
#include<stdlib.h>
void convert_data(FILE *in_fp, FILE *out_fp);
int main(){
char INFILENAME[100];
char OUTFILENAME[100];
FILE *in_fp;
FILE *out_fp;
scanf("%s",INFILENAME);
scanf("%s" ,OUTFILENAME);
in_fp = fopen(INFILENAME,"r");
if(in_fp == NULL){
fprintf(stderr, "I cannot open%s \n", INFILENAME);
exit(1);
}
out_fp = fopen(OUTFILENAME, "w");
if (out_fp==NULL) {
fprintf(stderr, "I cannot open%s \n", INFILENAME);
exit(1);
}
convert_data(in_fp, out_fp);
fclose(in_fp);
fclose(out_fp);
}
void convert_data(FILE *in_fp,FILE *out_fp){
double i,j;
do{
fscanf(in_fp,"%lf",&i);
fscanf(in_fp,"%lf",&j);
j = j*j;
fprintf(out_fp,"%f %f\n",i,j);
printf("%lf %lf\n",i ,j);
}while(feof(in_fp)==0);
printf("%lf\n",&i);
}
W+WVj++8kV0g5YmN5Zue44Gu5pS56aGM44Gn44Gv44Ki44K544Kt44O844OV44Kh44Kk44Or44Gu6Kqt44G/5pu444GN44KS5a2m44KT44Gg44CCCuS7iuWbnuOBr+OAgeWJjeWbnuOBrmthZGFpMTAtMi5jKOWJjeWbnuOBruiqsumhjOOBruWVj++8kinjgpLmlLnoia/jgZfjgablpInmj5vjgZfjgZ/jg4fjg7zjgr/jgpIK44OQ44Kk44OK44Oq5b2i5byP44Gn44OV44Kh44Kk44Or44Grc2F2ZeOBmeOCi2thZGFpMTEtMS5j44KS5L2c44KN44GG44CCCuODkOOCpOODiuODquOBp+ODh+ODvOOCv3NhdmXjgZnjgovjgavjga9md3JpdGUoKeOCkuS9v+OBhuOAggrjgZPjgZPjgafjga/jg5XjgqHjgqTjg6vlkI3jgpLjg5fjg63jg4jjgr/jgqTjg5flrqPoqIDjgaflm7rlrprjgZnjgovjgZPjgajjgavjgZnjgovjgIIKCuS7peS4i+OBrmNvbnZlcnRfYigp44Gu5oqc44GR44Gm44GE44KL6YOo5YiG44KS6KOc44Gj44Gm44OQ44Kk44OK44Oq44O844Gn44OH44O844K/44KS5L+d5a2Y44GZ44KLCuODl+ODreOCsOODqeODoGthZGFpMTEtMS5j44KS5L2c44KK44Gq44GV44GE44CCCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSBJTkZJTEVOQU1FICJ0ZXN0LmRhdCIgIC8v6Kqt44G/6L6844KA44OV44Kh44Kk44Or5ZCNCiNpbmNsdWRlIE9VVEZJTEVOQU1FICJ0ZXN0LWJpbi5kYXQiIC8v5L+d5a2Y44OV44Kh44Kk44Or5ZCNCiAKdm9pZCBjb252ZXJ0X2IoRklMRSAqaW5fZnAsIEZJTEUgKm91dF9mcCk7ICAvL+ODl+ODreODiOOCv+OCpOODl+Wuo+iogAoKaW50IG1haW4oKSB7CiAgICAgIAogICAgICAgIEZJTEUgKmluX2ZwLCAqb3V0X2ZwOwogICAgICAKICAgICAgICBpbl9mcCA9IGZvcGVuKElORklMRU5BTUUsICJyIik7IC8v44OV44Kh44Kk44Or44KS6Kqt44G/6L6844G/44Oi44O844OJ44Gn6ZaL44GPCiAgICAgICAgaWYgKGluX2ZwID09IE5VTEwpIHsvL+ODleOCoeOCpOODq+OBjOmWi+OBkeOBquOBhOWgtOWQiOOBr2luX2Zw44GMTlVMTOOBq+OBquOCi+OAggrjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIAo44OV44Kh44Kk44Or44GM6KaL5LuY44GL44KJ44Gq44GE5pmC562JKQogICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJIGNhbm5vdCBvcGVuICVzXG4iLCBJTkZJTEVOQU1FKTsK44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CALy/mqJnmupbjgqjjg6njg7zlh7rlipvjgavjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrjjgpLlh7rlipsKICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgfQoKICAgICAgICBvdXRfZnAgPSBmb3BlbihPVVRGSUxFTkFNRSwgInciKTsgLy/jg5XjgqHjgqTjg6vjgpLmm7jjgY3ovrzjgb/jg6Ljg7zjg4njgafplovjgY8KICAgICAgICBpZiAoaW5fZnAgPT0gTlVMTCkgey8v44OV44Kh44Kk44Or44GM6ZaL44GR44Gq44GE5aC05ZCI44GvaW5fZnDjgYxOVUxM44Gr44Gq44KL44CCCuOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgCjjg5XjgqHjgqTjg6vjgYzopovku5jjgYvjgonjgarjgYTmmYLnrYkpCiAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkkgY2Fubm90IG9wZW4gJXNcbiIsIElORklMRU5BTUUpOwrjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIAvL+aomea6luOCqOODqeODvOWHuuWKm+OBq+OCqOODqeODvOODoeODg+OCu+ODvOOCuOOCkuWHuuWKmwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgogICAgICAgIGNvbnZlcnRfYihpbl9mcCxvdXRfZnApOyAvL2luX2Zw44KI44KK44OH44O844K/44KS6Kqt44G/6L6844G/44CBb3V0X2Zw44Gr57WQ5p6c44KSc2F2ZeOBmeOCi+OAggogICAgICAgIGZjbG9zZShpbl9mcCk7ICBmY2xvc2Uob3V0X2ZwKTsgLy/jg5XjgqHjgqTjg6vjgpLplonjgZjjgosKfQoKdm9pZCBjb252ZXJ0X2IoRklMRSAqaW5fZnAsIEZJTEUgKm91dF9mcCkgewogICAgICAgZmxvYXQgZGF0YTEsIGRhdGEyOwogICAgICAgd2hpbGUgKCFmZW9mKGluX2ZwKSkgewogICAgICAgICAgICAuLi4uLi4KICAgICAgICAgICAgZndyaXRlKC4uLi4sIHNpemVvZihmbG9hdCksIC4uLi4sIC4uLi4uKTsKICAgICAgfQp9CgoKCuS9nOaIkOOBl+OBpuOBv+OBn2thZGFpMTEtMS5j44GM5q2j44GX44GP44Gn44GN44Gf44GL44Gp44GG44GL44Gv44OB44Kn44OD44Kv44OX44Ot44Kw44Op44Og44GM5L2/44GI44G+44Gb44KT44CCCuOBneOBruOBvuOBvuOCveODvOOCueODleOCoeOCpOODq+OCkuODqeOCpOODluODqeODquOBrgrjgIzjg5fjg6rjg5fjg63jgrvjg4PjgrXjgajjg5XjgqHjgqTjg6vmk43kvZzjgI3jga7jgIzjg5DjgqTjg4rjg6rjg5XjgqHjgqTjg6vjga5zYXZl44CN44Gr5oqV56i/44GX44Gm44GP44Gg44GV44GE44CCCgoKCmthZGFpMTAtMi5j44KS5Lul5LiL44Gr56S644GZ44CCCiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgoKdm9pZCBjb252ZXJ0X2RhdGEoRklMRSAqaW5fZnAsIEZJTEUgKm91dF9mcCk7CmludCBtYWluKCl7CiAgICAgICAgY2hhciBJTkZJTEVOQU1FWzEwMF07CiAgICAgICAgY2hhciBPVVRGSUxFTkFNRVsxMDBdOwogICAgICAgIEZJTEUgKmluX2ZwOwogICAgICAgIEZJTEUgKm91dF9mcDsKICAgICAgICBzY2FuZigiJXMiLElORklMRU5BTUUpOwogICAgICAgIHNjYW5mKCIlcyIgLE9VVEZJTEVOQU1FKTsKICAgICAgICBpbl9mcCA9IGZvcGVuKElORklMRU5BTUUsInIiKTsKICAgICAgICBpZihpbl9mcCA9PSBOVUxMKXsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSSBjYW5ub3Qgb3BlbiVzIFxuIiwgSU5GSUxFTkFNRSk7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgb3V0X2ZwID0gZm9wZW4oT1VURklMRU5BTUUsICJ3Iik7CiAgICAgICAgIGlmIChvdXRfZnA9PU5VTEwpIHsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSSBjYW5ub3Qgb3BlbiVzIFxuIiwgSU5GSUxFTkFNRSk7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgY29udmVydF9kYXRhKGluX2ZwLCBvdXRfZnApOwogICAgICAgIGZjbG9zZShpbl9mcCk7CiAgICAgICAgZmNsb3NlKG91dF9mcCk7Cn0KCgoKdm9pZCBjb252ZXJ0X2RhdGEoRklMRSAqaW5fZnAsRklMRSAqb3V0X2ZwKXsKICAgICAgICBkb3VibGUgaSxqOwogICAgICAgIGRvewogICAgICAgICAgICAgICAgZnNjYW5mKGluX2ZwLCIlbGYiLCZpKTsKICAgICAgICAgICAgICAgIGZzY2FuZihpbl9mcCwiJWxmIiwmaik7CiAgICAgICAgICAgICAgICBqID0gaipqOwogICAgICAgICAgICAgICAgZnByaW50ZihvdXRfZnAsIiVmICVmXG4iLGksaik7CiAgICAgICAgICAgICAgICBwcmludGYoIiVsZiAlbGZcbiIsaSAsaik7CiAgICAgICAgICAgICAgICB9d2hpbGUoZmVvZihpbl9mcCk9PTApOwogICAgICAgICAgICAgICAgcHJpbnRmKCIlbGZcbiIsJmkpOwp9