単純で愚かなことの解決策を探して最後の4時間を無駄にしたので、私は少し必死です。学校で、テキストファイルから整数を読み取り、それらの最大値を計算する必要があるプロジェクトがあります。重要なのは、これらの数字は必ずしもスペースで区切られている必要はなく、タブ(\ t)または改行(\ n)でも区切られているということです。fscanf関数を使用して整数を読み取りますが、問題は、最後の数値の後にファイルにスペースがあるため、最後の数値の2倍を読み取ることです(理由はわかりません)。通常は「そのスペースを削除するだけ」と言いますが、私の先生はいくつかの方法でプログラムをテストする予定であり、プログラムは堅牢である必要があると警告しました(スペースを管理できる必要があります、\ t、\ n数字を正しく読み取ることができるので、最後の数字の後に意図的にスペースを残したのはこのためです)。
FILE* file = NULL;
int *t = NULL, *new_size = NULL;
int temp, count;
file = fopen(argv[1],"r");
do
{
fscanf(file,"%d",&temp);
count++;
new_size = (int*) realloc (t, count * sizeof(int));
if (new_size != NULL)
{
t = new_size;
t[count-1] = temp;
}
else
{
free(t);
puts("Erreur d\'allocation memoire!\n");
exit(1);
}
} while(!feof(file));
fclose(file);
printf ("Numbers read\n:");
for(i = 0; i < count; i++)
{
printf ("%d ", t[i]);
}
そして、私の引数はdata.txtという名前のファイルで、3 1 7 0 4 96150と最後に\nが含まれています。つまり、基本的に、私のプログラムは最初の8つの整数を読み取り、その後、EndOfFileではないため、最後の整数(150)を再度読み取ります。だから私の出力は次のとおりです。
3 1 7 0 4 9 6 150 150
プログラムをより堅牢にするために何をすべきか教えてもらえますか?最後にスペースがある場合、またはタブ(\t
)がある場合は、同じタイプのOSエラーを管理する必要があります。どんな助けでもいただければ幸いです!