1

C プログラミングに関する本を読んでいますが、示されている例がわかりません。より正確には、なぜ機能するのか理解できません。

コードは単純で、テキスト ファイルの内容を読み取り、出力領域に出力します。私が理解している限りでは、

 ch = fgetc(stream);

一度に1つのintしか読み取らないため、whileループ内にある必要がありますか? 現在の int が出力された後、次の int を読み取る必要があります。さて、このコードは実際にうまく機能することが判明したので、誰かが私の誤謬を説明してくれることを願っています. ありがとう!

#include <stdio.h>

int main(int argc, char *argv[]) {
    FILE *stream;
    char filename[67];
    int ch;
    printf("Please enter the filename?\n");
    gets(filename);
    if((stream = fopen(filename, "r")) == NULL) {
        printf("Error opening the file\n");
        exit(1);
    }

    ch = fgetc(stream);
    while (!feof(stream)) {
        putchar(ch);
        ch = fgetc(stream);
    }

    fclose(stream);
}
4

8 に答える 8

1

これは機能しないコードです。ファイルの最後の文字は出力されません。fgetc最後の文字を読み取り、ポインターはファイルの最後になります。そのため、while をチェック!feofすると false が返され、読み取った文字は出力されません。 feofはファイルの終了後に読み取りを妨げていません: 空のファイルの場合は!のfgetc前に呼び出されます。feofコンソールの処理に利点がない限り、より良いオプションが 2 つあります。 feof を使用する:

while (!feof(stream)) {
    ch=fgetc(stream);
    putchar(ch);
}

使用しない場合feof-文字がなくなるとfgetc返されるため:EOF

while ((ch=fgetc(stream))!=EOF) putchar(ch);
于 2013-07-15T08:46:39.910 に答える