0

私は今日 FILE I/O を始めたばかりで、ここで混乱しています。以下のコードの while ループでは、奇妙な出力が得られます。iから開始して出力しi = 1ますa[1] = ..が、 while ループの外側では、 を指定しましi = 0た。iwhile ループに入った後に 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 ループを終了するべきではありませんか? もう一度ループを実行するのはなぜですか?

4

1 に答える 1

1

長すぎるため、端末は出力の最初の行を切断します。

于 2013-02-21T17:33:19.150 に答える