将双精度数组写入文件时出现问题

sfa*_*tor 1 c file-io printf

我有一个非常大的双精度数字数组……我尝试使用 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[] 中的所有值都已正确填充。

pmg*_*pmg 5

打印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)