我昨天发布了一个关于我的代码的某个部分的问题。目的是基本上将 .dat 文件中的数据值扫描到数组中,打印这些值,同时计算文件中有多少值。
听起来很简单,但我的程序似乎只打印了一定数量的值。更具体地说,对于包含超过 300000 个值的数据文件,它只会打印最后的 20000 个,而不会打印其他任何内容。
所以我离开了它,完成了我剩下的代码,现在这是我必须排序的最后一部分。我做了一些更改并尝试现在实际打印输出 .dat 文件,这样我就可以看到我得到了什么。顺便说一句,代码在下面。
最初我认为这可能与我的数组的内存分配有关(出现分段错误?将整个代码放在一起时),所以我创建了一个外部函数来计算值的数量(有效)。
我现在唯一的问题是它仍然只选择打印 20000 个值,然后其余的都是 0。我在想也许它与类型有关,但它们都包含 7 dps 的科学计数法。以下是一些值的示例:
8.4730000e+01 1.0024256e+01
8.4740000e+01 8.2065599e+00
8.4750000e+01 8.3354644e+00
8.4760000e+01 8.3379525e+00
8.4770000e+01 9.8741315e+00
8.4780000e+01 9.0966478e+00
8.4790000e+01 9.4760274e+00
8.4800000e+01 7.1199807e+00
8.4810000e+01 7.1990172e+00
任何人都看到我要去哪里错了吗?对于这个冗长的问题,我很抱歉,它只是在最后一天左右一直困扰着我,无论我改变什么似乎都无济于事。任何类型的输入将不胜感激。
#include <stdio.h>
#include <stdlib.h>
int count(int);
const char df[]="data_file.dat";
const char of[]="output_file.dat";
int main(int argc, char *argv[])
{
FILE *input, *output;
int i, N;
float *array;
N = count(i);
input = fopen(df, "r");
output = fopen(of, "w");
array = (float*)malloc(N*sizeof(float));
if((input != (FILE*) NULL) && (output != (FILE*) NULL))
{
for(i = 0; i < N; i++)
{
fscanf(input, "%e", &array[i]);
fprintf(output, "%d %e\n", i, array[i]);
}
fclose(input);
fclose(output);
}
else
printf("Input file could not be opened\n");
return(0);
}
int count(int i)
{
FILE *input;
input = fopen(df, "r");
int N = 0;
while (1)
{
i = fgetc(input);
if (i == EOF)
break;
++N;
}
fclose(input);
return(N);
}