我目前正在编写一些代码,到目前为止,一切都编译好。代码的目的是这样的:外部函数不工作 - 但不知道为什么
- 从数据文件读取输入并将值分配给数组。
- “平滑数据”是通过取给定间隔的数据平均值,并用该平均值替换该间隔中的每个值。
这是导致我陷入困境的第二部分。在外部函数,由于某种原因,它工作时,我的“for”循环是这样的:
for(i=t; i<t+z; i++)
但我不希望它这样做。我想要它这样做:
for(i=t*z; i<(t+1)*z; i++)
当我尝试编译时,它只是崩溃了我。任何人都知道原因?现在几个小时我一直困惑着我。所有代码如下所示:
#include <stdio.h>
#include <stdlib.h>
float foo(float*, int, int);
int main(int argc, char* argv[])
{
FILE *input;
const char datafile[]="datainput.dat";
input=fopen(datafile, "r");
int i;
int N=0, t=0;
int z=100;
int M=10;
float *a, avg;
a=(float*)malloc(M*sizeof(float));
if((input!=(FILE*) NULL))
{
while(fscanf(input, "%e", &a[t++])==1)
{
if (t>=M)
{
M*=2;
a=(float *)realloc(a, M*sizeof(float));
}
N++;
}
float u[N];
for(t=0; t<N; t++)
{
avg = foo(a, z, t);
u[t] = avg;
}
fclose(input);
}
else
printf("Input file could not be opened.\n");
return(0);
}
float foo(float b[], int z, int t)
{
int i;
int k=0;
float avg;
float sum=0;
for(i=t*z; i<(t+1)*z; i++)
{
sum+=b[i];
k++;
}
avg = sum/(float)k;
return(avg);
}
注意:你可能会注意到在代码中定义float u [N]的糟糕做法。我不太喜欢这种存在,但是你会注意到N是一个变量,用于统计输入文件中的数值(最初是未知的),并且初始化设置为N = 0,所以我不确定如何我解决了这个问题。
此外,我在这里提出了这个问题,但我的realloc没有任何条款,如果它失败。这是我正在努力,但目前它编译没有它在那里。
此外,所有数据值的形式都是浮点数,小数点后七位,以科学计数法表示,因此%e。
谢谢!
编辑:这里是一些来自数据文件的值。即使左边的值有序,它们也是文件中的实际值,而不是表示右边的值。
8.0800000e+00 7.0872796e-01
8.0900000e+00 7.1941101e-01
8.1000000e+00 2.1635408e+00
8.1100000e+00 -5.4200807e-01
8.1200000e+00 1.1046968e+00
8.1300000e+00 1.5833782e+00
8.1400000e+00 6.6122899e-01
8.1500000e+00 1.7922273e+00
8.1600000e+00 1.2446803e+00
8.1700000e+00 3.7869871e-01
8.1800000e+00 1.4793635e+00
8.1900000e+00 1.0508171e+00
8.2000000e+00 9.1012735e-01
8.2100000e+00 6.0967729e-01
8.2200000e+00 1.3834455e+00
8.2300000e+00 -5.2312924e-01
8.2400000e+00 9.2566688e-01
8.2500000e+00 7.8145188e-01
8.2600000e+00 4.1410150e-01
8.2700000e+00 1.9796986e+00
8.2800000e+00 5.9372874e-01
8.2900000e+00 1.8696331e+00
8.3000000e+00 2.3058409e+00
它如何崩溃?分段错误?如果是这样,你是否尝试通过'gdb'来查看哪条线导致崩溃? –
什么是错误,以及在哪一行?你也可能想让你的变量名更有意义。 – OldProgrammer
我目前正在使用Codeblocks,当我尝试运行它时,它说file.exe已停止工作(如在Windows上没有响应时)。 – user1988898