現在、とある数値データの羅列(15万点程度,小数)をtxtファイルからファイル入力し、数値処理してからファイルに出力するプログラムを作っているのですが、コンパイル後実行すると動作停止のエラーが出てしまいます。以下ソースコードです。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
FILE *fq;
double before[200000];
double after[200000];
int i , j = 0 , k , n = 0;
if ((fp = fopen("test.txt", "r")) == NULL) {
printf("%sのオープンに失敗しました.\n");
exit(EXIT_FAILURE);
}
while ( fscanf(fp, "%lf", &before[n])) {
n++;
}
fclose( fp );
n = n-1; //改行分削除
for(i=0; i<100; i++){
after[i] = before[i];
}
//100個目のデータまでは処理の対象にしない
for(i=100; i<n; i++){
if( j==0 ){
if( before[i] - before[i-1] >= 0.000002704 || before[i] - before[i-1] <= -0.000002704){
after[i] = after[i-1] ;
j++ ;
} //1つ前の数値より規定以上大きく動いたら1つ前の数値を保持
else{
after[i] = before[i] ;
}
}
else if( j > 0 && j <= 10 ){
after[i] = after[i-1] ;
j++ ;
} //1度保持したら10点分は無条件で1つ前の値を保持
else if( j > 10 ){
if( before[i] - before[i-10] >= 0.000001352 || before[i] - before[i-10] <= -0.000001352){
after[i] = after[i-1] ;
j++ ;
} //11点目以降で10点前と比較、値のズレが大きかったら値の保持を継続
else{
after[i] = before[i] ;
j = 0;
} //ズレが小さかったら値を保持せず元のデータをそのまま移行
}
}
if ((fq = fopen("result.txt", "w")) == NULL) {
printf("%sのオープンに失敗しました.\n");
exit(EXIT_FAILURE);
}
for( k=0 ; k<n ; k++){
fprintf(fq, "%lf\n", after[k]);
}
//ファイル出力
fclose( fq );
return 0;
}
コンパイルでエラーが出ていないので、ファイル入出力がうまくできていないのでしょうか?
実行できない理由、改善策などもしよろしければ教えていただけると嬉しいです。
今週中には完成させたいので、お早めにご教授いただければ幸いです。
よろしくお願い致します。