fscanf读取一个浮点数组,但只获取数组中的第一个数字

时间:2016-02-12 03:54:58

标签: c arrays scanf

读取文件时,第一个数字是int,大小与数组相同,其余为double

这是功能:

void read1dascii(double** a, int* m, char* infile)
{
 FILE * fp = fopen(infile, "r");

 fscanf(fp, "%d", m);
 alloc1d(a, *m);

 fscanf(fp, "%lf\n", *a);

 fclose(fp);
}

以下是它调用的alloc1d函数:

void alloc1d(double** a, int m)
{
 *a = malloc(sizeof(double) * m);
}

我得到的第一个数字是大小,然后是数组中的第一个数字,但其余的数字都是零。

2 个答案:

答案 0 :(得分:1)

您需要使用循环阅读所有这些内容。

int i;
for (i = 0; i < *m; ++i) {
  fscanf(fp, "%lf", *a + i);
}

答案 1 :(得分:0)

fscanf(fp, "%lf\n", *a);

这里你只读一次,所以它只是接收第一个浮点数,要读取数组的其余部分,你需要像

这样的东西
while ( fscanf(fp, "%lf\n", &a) == 1 ) 
{
    /* do stuff with 'a' here */
}