从/到文件读取和写入双精度

时间:2013-05-09 14:03:31

标签: c++ c

我正在尝试将双数组写入文件并再次读取它们。下面是我的代码,但有些东西我不知道了。这听起来很傻但我无法做对。

#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;

}

1 个答案:

答案 0 :(得分: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,只要值对此有效,就可以在不进行分析的情况下读取这些值其他任何事情[假设输出也使用cout而不是printf,当然]。