私はfgetcと文字カウント方法を使って文字ファイルをループし、逆の順序で返します。試してみると2つの予期しないことが起こります。ループの2番目の反復を最初のものの下に貼り付けると、それは非常に異なった不吉な結果を返します。同様に、最初のループは最初に追加の文字を除いて正しい結果を返します。fgetcが間違った結果を返すループ
たとえば、ファイルに 'Hello'という文字列が含まれている場合、最初の反復は5olleH
と2番目のHeHeHeHeHeHeHeHeHeHeHeHeHeHe
を返します。両方のループで正しい結果がolleH
になります。ここで
FILE *file = fopen(argv[1], "r");
count = count_characters(file);
int originalCount = count;
while(count){
ch = fgetc(file);
printf("%c", ch);
fseek(file, -2L, 1); // shifts the pointer to the previous character
count--;
}
count = originalCount;
while(count){
ch = fgetc(file);
printf("%c", ch);
fseek(file, -2L, 1); // shifts the pointer to the previous character
count--;
}
'fseek'を使ってファイルの位置を正しく設定する必要があります。 – interjay
SEEK_CURの代わりに1を使用しているのはなぜですか?同じでも読みにくいのはなぜですか? –
@KeineLustこれは、[コードOPコピー元](http://www.studytonight.com/c/program-to-reverse-content-of-file.php)が使用したものです。 OPでは、コードをコピーして他の人がそれを修正することを期待するのではなく、コードが何をするのかを理解しようとする。 – interjay