我试图将双数组写入文件并再次读取它们。 下面是我的代码,但有一些我缺少的东西。 这听起来很傻但我无法做对。
#include #include 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,"%gn",(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 %gn",ref[i], readIn[i]); } return 0; }
你的fscanf
使用了错误的格式字符串(GCC会告诉你是否启用了足够的警告)。
所以你的double
填充float
值,这当然会导致相当“随机”的错误。
如果你将"%g"
更改为"%lg"
,它应该可以正常工作(至少它在我的Linux机器上)。
当然,如果您使用C ++流,例如
#include 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/c++开发分享从/到文件读取和写入双精度相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522093.html