0

double 配列をファイルに書き込んで、再度読み取ろうとしています。以下は私のコードですが、欠けているものがあります。ばかげているように聞こえますが、正しく理解できません。

#include <stdio.h>
#include <stdlib.h>

int main(){

  int i,j,k;
  int N = 10;

  double* readIn = new double[N];
  double* ref = new double[N];
  FILE* ptr1, *ptr2;

  ptr1 = fopen("output.txt","w");
  //write out
  for (i = 0; i < N;i++){
    ref[i] = (double)i;
    fprintf(ptr1,"%g\n",(double)i);
  }
  fclose(ptr1);
  //read file
  ptr2 = fopen("output.txt","r+");
  //read in
  for(i = 0;i < N;i++)
    fscanf(ptr2, "%g", &readIn[i]); 


  fclose(ptr2);

  for(i = 0;i<N;i++)
    if(ref[i] != readIn[i]){
      printf("Error:  %g   %g\n",ref[i], readIn[i]);
    }

  return 0;

}
4

1 に答える 1

7

間違っfscanfたフォーマット文字列を使用しています (十分な警告を有効にすると、GCC から通知されます)。

したがって、あなたdoubleは値で満たされているfloatため、もちろん「ランダムな」エラーが発生します。

を に変更する"%g""%lg"、問題なく動作するはずです (少なくとも、私の Linux ボックスでは動作します)。

もちろん、C++ ストリームを使用する場合、たとえば

 #include <fstream>

 std::ofstream file1;
 std::ifstream file2;

 file1.open("output.txt");

 for (i = 0; i < N;i++){
    ref[i] = (double)i;
    file1 << (double)i << std::endl;
 }

   file2.open("output.txt");
   for(i = 0;i < N;i++)
      file2 >> readIn[i]; 

問題全体は回避されていたでしょう-readIn変数を に編集するfloatと、値が有効である限り、他に何も変更せずにそれらの値を読み取ることができます[出力がcoutprintfの代わりに使用されていると仮定すると、もちろん]。

于 2013-05-09T14:09:11.787 に答える