Как сделать матрицу по fscanf? - PullRequest
0 голосов
/ 24 мая 2018

Я хочу сделать матрицу, используя 'fscanf'.Я уже сделал текстовый файл, и открыл его.Но я не знаю, почему это не работает.

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;
}

Когда я запускаю этот код, результатом будет -9.255963e + 61 -9.255963e + 61 -9.255963e + 61 -9.255963e+61 -9.255963e + 61 ..... и нажмите любую клавишу.

Текстовый файл представляет собой массив экспоненциальных, например -9.460415e-18.-9.255963e + 61 не существует в моем текстовом файле.

Некоторые люди говорят, что используют "% lf" вместо "% e", но это не работает.

1 Ответ

0 голосов
/ 24 мая 2018

Ваш код в основном правильный, за исключением следующего: вы используете тип double, но строки формата для типов fscanf и printf ожидают 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).

...