私は今日 FILE I/O を始めたばかりで、ここで混乱しています。以下のコードの while ループでは、奇妙な出力が得られます。i
から開始して出力しi = 1
ますa[1] = ..
が、 while ループの外側では、 を指定しましi = 0
た。i
while ループに入った後に 1 にインクリメントする理由はありますか? 紛らわしいのは、最後の for ループがa[0] = 0
正しく出力されていることです!
#include <stdio.h>
#include <stdlib.h>
#define N 11
int main()
{
FILE *fp;
int i, a[N];
fp = fopen("numbers.txt", "w");
for(i = 0; i < N; i++)
fprintf(fp,"%d\n",i);
fclose(fp);
fp = fopen("numbers.txt", "r");
i = 0;
while(!feof(fp))
{
printf("i = %d ",i);
fscanf(fp,"%d",&a[i]);
printf("a[%d] = %d\n",i,a[i]);
i++;
}
for(i = 0; i < N; i++)
printf("%d\n",a[i]);
return 0;
}
編集:上記の問題が明確になり、別の混乱が生じました。ファイルの最後の数値を読み取った後、feof(fp) はゼロ以外の値を返し、while ループを終了するべきではありませんか? もう一度ループを実行するのはなぜですか?