我目前正在編寫一些代碼,到目前爲止,一切都編譯好。代碼的目的是這樣的:外部函數不工作 - 但不知道爲什麼
- 從數據文件讀取輸入並將值分配給數組。
- 「平滑數據」是通過取給定間隔的數據平均值,並用該平均值替換該間隔中的每個值。
這是導致我陷入困境的第二部分。在外部函數,由於某種原因,它工作時,我的「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