我想用“fscanf”做一个矩阵。我已经做了一个txt文件,并打开了它。但是,我不知道为什么不起作用。

int main(void)
{
  FILE *filter;
  double coeffs[61];

  filter = fopen("coeffs_fir.txt", "r");

  if (filter == NULL) {
      puts("can't open it");
      return -1;
  }

  for (int i = 0; i <61; i++)   {
        fscanf(filter, "%e", &coeffs[i]);
        printf("%e ", coeffs[i]);
  }
  fclose(filter);
  system("pause");
  return 0;
}

当我运行这个代码时,reslult是-9.255963e+61-9.255963e+61-9.255963e+61-9.255963e+61-9.255963e+61。。。。。然后按任意键。
txt文件是指数数组,如-9.460415e-18。
在我的TXT文件中不存在.9255963E+ 61。
有人说用%lf代替%e,但它不起作用。

最佳答案

您的代码基本正确,除了以下几点:您使用的是double类型,但是fscanfprintf的格式字符串需要float类型。许多编译器会发出这样的警告:

test.c:17:24: warning: format '%e' expects argument of type 'float *', but argument 3 has type 'double *' [-Wformat=]
     fscanf(filter, "%e", &coeffs[i]);

所以,只要在l后面加上%就可以修复这两行:
fscanf(filter, "%le", &coeffs[i]);
printf("%le ", coeffs[i]);

注意:我确实测试了上面的代码,它工作正常(gcc(Ubuntu 5.4.0-6ubuntu1~16.04.9)5.4.0 20160609)。

08-16 20:44