【发布时间】:2009-12-07 16:35:26
【问题描述】:
我有一个非常大的双精度数字数组...我尝试使用 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]);
}
但是,存在一个问题,即它将数据写入到一定数量的行,之后 i 给出全零。例如
3.040
0.700
-2.740
0.000
0.000
0.000
0.000
0.000
0.000
我真的不明白可能是什么问题。当数组中有值时,为什么将所有值都写为0.000。
如果有帮助,这里是 diff 的实现方式。
diff = (double *)malloc(fileSize);
diff[0] = data[0];
for(j = 1; j < n; j++ )
{
diff[j] = data[j] - data[j-1];
}
文件中的值存储在 data[] 中。然后我将 data[] 中相邻值的差异计算为 diff[] 并将其写回另一个文件。 fileSize 是原始文件的大小。而且我确信 diff[] 中的所有值都已正确填充。
【问题讨论】:
-
你怎么知道有一些值?您是否在
fprintf()上使用了断点并实际检查了该数组的内容? -
你确定 diff 中至少有 j 个元素吗?
-
在格式说明符中将小写“l”更改为大写“L”。
-
您能显示声明
diff的来源吗?你能告诉我们j被赋值的来源吗? -
是的,我确定,我通过将 printf("%0.3lf\n", diff[k]) 写入控制台来检查它,它显示了所有值。所以我很确定数据在那里...我知道它的大小可达 j。