0

こんにちは、私はここで ac プログラムを作成しています。一度にテキスト ファイルから 2 行を印刷しようとしていますが、最後の行で行が奇数の場合、3 行 5 行になるという問題があります。最後の行が 2 回表示されます。特定の質問に対する if 関数の比較が見つかりません。ブールですか?現在 ferror(file) を試しています

    FILE *file;

    printf("Hello!\n");
    printf("Please input file name(without.txt):\n");

    scanf("%s", input);
    strcat(input,".txt");
    file = fopen( input , "r" );

    while(!(feof(file)))
    {

        for(i=0; i<2; i++){
        **if(feof(file)==ferror(file))**
        {
            printf("File ended");
                return 0;
        }
        else
        {
            fgets(return_char, 200, file);
            printf("%s\n", return_char);
        }
    }

    }

入力例:

私は猫を飼っています

私は犬を飼っている

私は牛を飼っています

期待される出力:

最初のラウンド

私は猫を飼っています

私は犬を飼っている

二回戦:

私は牛を飼っています

現在の出力 : 第 1 ラウンド :

私は猫を飼っています

私は犬を飼っている

二回戦:

私は牛を飼っています

私は牛を飼っています

4

2 に答える 2

2

あなたが観察する動作はfoef、事後にファイルの終わりをチェックする典型的なものです。

通常は、 の代わりにファイル読み取り関数 ( 、fgetsなど)の戻り値を使用することをお勧めします。ループは次のようになります。fgetcfreadfeof

while (1) {
    for(i=0; i<2; i++) {
        if (fgets(return_char, 200, file) == NULL) {
            printf("File ended");
            return 0;
        }            
        printf("%s", return_char);            
    }
    printf("--\n");
}

または、明示的なループオーバーiと外側の無限ループフレームワークなし:

i = 0;
while (fgets(return_char, 200, file)) {
    printf("%s", return_char);            
    if (i == 1) printf("--\n");
    i = 1 - i;
}

printf("File ended");
return 0;
于 2014-09-03T11:24:59.353 に答える