fork(1) download
  1. [問1] 前回の改題ではアスキーファイルの読み書きを学んだ。
  2. 今回は、前回のkadai10-2.c(前回の課題の問2)を改良して変換したデータを
  3. バイナリ形式でファイルにsaveするkadai11-1.cを作ろう。
  4. バイナリでデータsaveするにはfwrite()を使う。
  5. ここではファイル名をプロトタイプ宣言で固定することにする。
  6.  
  7. 以下のconvert_b()の抜けている部分を補ってバイナリーでデータを保存する
  8. プログラムkadai11-1.cを作りなさい。
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include INFILENAME "test.dat" //読み込むファイル名
  13. #include OUTFILENAME "test-bin.dat" //保存ファイル名
  14.  
  15. void convert_b(FILE *in_fp, FILE *out_fp); //プロトタイプ宣言
  16.  
  17. int main() {
  18.  
  19. FILE *in_fp, *out_fp;
  20.  
  21. in_fp = fopen(INFILENAME, "r"); //ファイルを読み込みモードで開く
  22. if (in_fp == NULL) {//ファイルが開けない場合はin_fpがNULLになる。
  23.                   (ファイルが見付からない時等)
  24. fprintf(stderr, "I cannot open %s\n", INFILENAME);
  25.            //標準エラー出力にエラーメッセージを出力
  26. exit(1);
  27. }
  28.  
  29. out_fp = fopen(OUTFILENAME, "w"); //ファイルを書き込みモードで開く
  30. if (in_fp == NULL) {//ファイルが開けない場合はin_fpがNULLになる。
  31.                   (ファイルが見付からない時等)
  32. fprintf(stderr, "I cannot open %s\n", INFILENAME);
  33.            //標準エラー出力にエラーメッセージを出力
  34. exit(1);
  35. }
  36.  
  37. convert_b(in_fp,out_fp); //in_fpよりデータを読み込み、out_fpに結果をsaveする。
  38. fclose(in_fp); fclose(out_fp); //ファイルを閉じる
  39. }
  40.  
  41. void convert_b(FILE *in_fp, FILE *out_fp) {
  42. float data1, data2;
  43. while (!feof(in_fp)) {
  44. ......
  45. fwrite(...., sizeof(float), ...., .....);
  46. }
  47. }
  48.  
  49.  
  50.  
  51. 作成してみたkadai11-1.cが正しくできたかどうかはチェックプログラムが使えません。
  52. そのままソースファイルをライブラリの
  53. 「プリプロセッサとファイル操作」の「バイナリファイルのsave」に投稿してください。
  54.  
  55.  
  56.  
  57. kadai10-2.cを以下に示す。
  58. #include<stdio.h>
  59. #include<stdlib.h>
  60.  
  61. void convert_data(FILE *in_fp, FILE *out_fp);
  62. int main(){
  63. char INFILENAME[100];
  64. char OUTFILENAME[100];
  65. FILE *in_fp;
  66. FILE *out_fp;
  67. scanf("%s",INFILENAME);
  68. scanf("%s" ,OUTFILENAME);
  69. in_fp = fopen(INFILENAME,"r");
  70. if(in_fp == NULL){
  71. fprintf(stderr, "I cannot open%s \n", INFILENAME);
  72. exit(1);
  73. }
  74.  
  75. out_fp = fopen(OUTFILENAME, "w");
  76. if (out_fp==NULL) {
  77. fprintf(stderr, "I cannot open%s \n", INFILENAME);
  78. exit(1);
  79. }
  80.  
  81. convert_data(in_fp, out_fp);
  82. fclose(in_fp);
  83. fclose(out_fp);
  84. }
  85.  
  86.  
  87.  
  88. void convert_data(FILE *in_fp,FILE *out_fp){
  89. double i,j;
  90. do{
  91. fscanf(in_fp,"%lf",&i);
  92. fscanf(in_fp,"%lf",&j);
  93. j = j*j;
  94. fprintf(out_fp,"%f %f\n",i,j);
  95. printf("%lf %lf\n",i ,j);
  96. }while(feof(in_fp)==0);
  97. printf("%lf\n",&i);
  98. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty