我有一个非常大的双精度数字数组……我尝试使用 fprintf() 将它写入文件中……我需要在每一行中写一个这些数字,所以我做了这样的事情。
if((fp2 = fopen("temp", "w")) == NULL) { perror("File cannot be opened"); exit(1); }
for(int k = 0; k < j; k++ )
{
fprintf(fp2, "%0.3lf\n", diff[k]);
}
Run Code Online (Sandbox Code Playgroud)
但是,存在一个问题,它将数据写入一定数量的行,然后我给出全零。例如
3.040
0.700
-2.740
0.000
0.000
0.000
0.000
0.000
0.000
Run Code Online (Sandbox Code Playgroud)
我真的不明白可能是什么问题。为什么当数组中有值时它将所有值都写为 0.000。
如果有帮助,这里是 diff 的实现方式。
diff = (double *)malloc(fileSize);
diff[0] = data[0];
for(j = 1; j < n; j++ )
{
diff[j] = data[j] - data[j-1];
}
Run Code Online (Sandbox Code Playgroud)
文件中的值存储在 data[] 中。然后我将 data[] 中相邻值的差异计算到 diff[] 并将其写回另一个文件。fileSize 是原始文件的大小。而且我确信 diff[] 中的所有值都已正确填充。
打印double值的正确转换说明符是%f, 不是%lf。
C99 没有指定%lf接受什么。您的实现可能会%lf作为扩展long doubles或某物提供,但您需要将变量的类型与转换说明符相匹配。检查您的编译器的文档。
如果您有long doubles正确的 C99 转换说明符是%Lf.
编辑,问题被编辑后
for(j = 1; j < n; j++ )
{
diff[i] = data[i] - data[i-1];
}
Run Code Online (Sandbox Code Playgroud)
循环变量是j,diff 和数据的索引是i。这是复制/粘贴错误,还是您真正的问题?:)
第二次编辑
嗯……malloc(fileSize)看起来非常非常可疑。
根据data数组中的元素数量,您不知道需要多少个元素吗?改用那个。
diff = malloc(number_of_elements_in_array_data * sizeof *diff);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6431 次 |
| 最近记录: |