【问题标题】:Error "invalid types 'float [100][float]' for array subscript" [duplicate]错误“数组下标的无效类型'float [100] [float]'” [重复]
【发布时间】: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,这正是我所做的,虽然不知道截断,但我会按照你的提示!再次感谢!

标签: c fft ifft


【解决方案1】:

错误告诉你究竟出了什么问题:k, n,N 必须声明为整数。您无法访问具有浮点索引的数组(该数组中的第 2.34 个值是多少)?

【讨论】:

  • 嗨,李,谢谢你的回答!它帮助我理解了这个问题。但是有没有办法让变量像一个 int 变量一样我可以将它用作索引?
  • 嗨@Lee Daniel Crocker,设法解决了我的问题。我只是将数组索引类型转换为 int ,一切似乎都工作正常!谢谢!
猜你喜欢
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2013-05-21
  • 2019-03-02
  • 2023-01-26
相关资源
最近更新 更多