我正在尝试将双数组写入文件并再次读取它们。下面是我的代码,但有些东西我不知道了。这听起来很傻但我无法做对。
#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;
}
答案 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,当然]。