【发布时间】:2018-08-21 16:45:21
【问题描述】:
我已经复制了下面的整个代码,并在我收到错误的那一行注释了。
我正在尝试测试我在网上找到的 iDFT 算法,但我无法编译它,当我尝试编译时,谁能帮我解决以下错误消息?
错误:数组下标的无效类型 'float [100][float]'
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
float static X[100],X_Real[100],X_Imag[100];
float k,n,N;
printf("\t\t\t Inverse Discrete Fourier Transform(IDFT)");
printf("\n\n Enter the length of DFT N=");
scanf("%f",&N);
printf("\n Enter the real and imaginary parts of X(k) as follows:\n\n"
"X(k) =Real{X(k)} Img{X(k)} \n" );
for(k=0;k<N;k++)
{
printf("X(%1.0f)=",k);
scanf("%f %f",&X_Real[k],&X_Imag[k]); // This is where I get the error
}
for(n=0;n<N;n++)
{
X[n]=0;
for(k=0;k<N;k++)
{
X[n]=X[n]+X_Real[k]*cos((2*M_PI*k*n)/N)-X_Imag[k]*sin((2*M_PI*k*n)/N);
}
X[n]=X[n]/N;
}
printf("\n\n The sequence x(n) is as follows...");
for(n=0;n<N;n++)
{
printf("\n\n X(%1.0f)=%3.6f",n,X[n]);
}
getch();
}
【问题讨论】:
-
数组索引必须是整数类型(6.5.2.1/1);使用
float作为索引是违反约束的。 -
您好 John Bode,感谢您的快速响应,我现在了解错误。但现在我的问题是“有没有办法让数组索引像一个 int 变量一样,即使它需要保持为浮点数?”我知道我读过一些叫做类型转换的东西,但我不确定如何利用它,因为我仍然是编码和编程的新手。
-
嗨@JohnBode,设法解决了我的问题。我只是将数组索引类型转换为 int ,一切似乎都工作正常!谢谢!
-
您可以像这样使用演员表:
X[ (int) n ]。但是,请注意,像这样的强制转换只会截断小数部分 - 它基本上向 0 舍入。例如,(int) 1.9999999=>1。如果您需要四舍五入到最接近的整数,则必须获得更多创意。如果你知道n总是非负数,(int) (n + 0.5)会在紧要关头做。 -
谢谢@JohnBode,这正是我所做的,虽然不知道截断,但我会按照你的提示!再次感谢!