[問１] 前回の改題ではアスキーファイルの読み書きを学んだ。
今回は、前回のkadai10-2.c(前回の課題の問２)を改良して変換したデータを
バイナリ形式でファイルに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);
}