首先是一些背景(不重要,如果你愿意,可以跳到下一段): 我必须编写一个软件来演示FFT算法(作为uni项目的一部分)。我要求用户选择正弦和余弦的混合或矩形函数,询问用户必要的参数,生成函数(在复杂的数组中,实数组件在0,2 ......和虚数在1,3中...),用零填充数据到下一个2的整数幂,将其传递给FFT函数(目前只是从C中的Numerical Recipes复制,一旦我的程序工作就会找到更好的东西!)然后我打印到文本文件。
除了我的打印功能外,一切都很顺利:
int printToFile (double* array, unsigned long pointNum, int eqnNo)
{
double f, df;
FILE *outputReal, *outputImag;
/*Open files of different names depending on which function was generated*/
if(eqnNo == 1)
{
outputReal = fopen("refft1.txt", "w");
outputImag = fopen("imfft1.txt", "w");
f = 0;
df = 1/DX;
}
else
{
outputReal = fopen("refft2.txt", "w");
outputImag = fopen("imfft2.txt", "w");
f = 0;
df = 1/DT;
}
printf("Checking if stuff opened correctl...y\n");
/*Check the file pointers*/
if(!outputReal)
{
printf("couldnt open file!\n");
perror("Error: ");
fclose(outputReal);
free(array);
array = NULL;
exit(1);
}
if(!outputImag)
{
printf("couldnt open file!\n");
perror("Error: ");
fclose(outputImag);
free(array);
array = NULL;
exit(1);
}
printf("Stuff opened!\n");
int j, i;
/*Print array elements to each file on the fly*/
for(i=0, j=1; i<pointNum; i++)
{
if(j > 0)/*real*/
{
/*printf("%G %G\n", f, array[i]);*/
fprintf(outputReal, "%G %G\n", f, array[i]);
}
else/*imaginary*/
{
fprintf(outputImag, "%G %G\n", f, array[i]);
/*printf("%G %G\n", f, array[i]);*/
f += df;
}
j *= -1;
}
fclose(outputReal);
fclose(outputImag);
}
它到达应该fprintf到文件的位置,程序只是停止(文件打开没有错误)。如果我用printfs替换fprintfs,它会愉快地打印出转换后的数组元素。如果我只是不在main中调用FFT函数并打印填充的用户生成的函数,它将打印到文件没问题。
有人可以提出我可能做错的事吗?我的猜测是,无论是我的打印功能是做坏事,还是通过调用FFT我搞砸了一些东西,这意味着fprintf无法正常工作(直接从NRiC复制,现在将浮动更改为双打)。不想在这里发布我的整个代码(目前是430行),但我在函数生成器和reallocs中有callocs用于从控制台读取用户输入,这可能也有问题,虽然我已经检查了它们,但这不会解释为什么它只在FFT之后中断。非常感谢帮助!