gpt4 book ai didi

c++ - 从/向文件读写 double

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:09 24 4
gpt4 key购买 nike

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

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

}

最佳答案

您的 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]。

关于c++ - 从/向文件读写 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16463661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com