昨日、コードの特定の部分に関する問題を投稿しました。目的は、基本的に、データ値を .dat ファイルから配列にスキャンし、値を出力しながら、ファイル内の値の数をカウントすることでした。
非常に単純に聞こえますが、私のプログラムは特定の数の値しか出力していないように見えました。より具体的には、300000 を超える値を含むデータ ファイルの場合、最後の 20000 のみを出力し、他には何も出力しません。
だから私はそれを残して、残りのコードを完成させました。そして今、私がソートしなければならない最後の部分です. いくつかの変更を加えて、出力 .dat ファイルを実際に印刷してみました。ちなみにコードは以下。
最初は、おそらく配列のメモリ割り当てに関連するものだと思っていたので(コード全体をまとめるとセグメンテーションエラーが発生しましたか?)、代わりに値の数をカウントする外部関数を作成しました(動作します)。
私の唯一の問題は、まだ 20000 の値のみを出力することを選択し、残りは 0 であることです。おそらくタイプと関係があると思っていましたが、科学表記法ではすべて7 dpsが含まれています。いくつかの値のサンプルを次に示します。
8.4730000e+01 1.0024256e+01
8.4740000e+01 8.2065599e+00
8.4750000e+01 8.3354644e+00
8.4760000e+01 8.3379525e+00
8.4770000e+01 9.8741315e+00
8.4780000e+01 9.0966478e+00
8.4790000e+01 9.4760274e+00
8.4800000e+01 7.1199807e+00
8.4810000e+01 7.1990172e+00
私がどこで間違っているのか誰にもわかりますか?長い質問で申し訳ありません。最後の日かそこらの間、私を悩ませていました。何を変更しても、何も役に立たないようです。どんな種類の入力でも大歓迎です。
#include <stdio.h>
#include <stdlib.h>
int count(int);
const char df[]="data_file.dat";
const char of[]="output_file.dat";
int main(int argc, char *argv[])
{
FILE *input, *output;
int i, N;
float *array;
N = count(i);
input = fopen(df, "r");
output = fopen(of, "w");
array = (float*)malloc(N*sizeof(float));
if((input != (FILE*) NULL) && (output != (FILE*) NULL))
{
for(i = 0; i < N; i++)
{
fscanf(input, "%e", &array[i]);
fprintf(output, "%d %e\n", i, array[i]);
}
fclose(input);
fclose(output);
}
else
printf("Input file could not be opened\n");
return(0);
}
int count(int i)
{
FILE *input;
input = fopen(df, "r");
int N = 0;
while (1)
{
i = fgetc(input);
if (i == EOF)
break;
++N;
}
fclose(input);
return(N);
}