我想用' 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。 -9.255963e + 61在我的txt文件中不存在。
有些人说使用&#34;%lf&#34;而不是&#34;%e&#34;,但它不起作用。
答案 0 :(得分:1)
您的代码大致正确,但以下情况除外:您使用的是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)。