このコードを考えてみましょう:
FILE * fp = fopen( filename, "r" );
int ret = fscanf(fp, "%d, %d, %d, %d, %d\n", &a, &b, &c, &d, &e);
if (ret != 5)
{
// error and exit
}
long file_pos = ftell(fp);
printf("file position: %ld\n", file_pos);
読み取られるファイルの行は次のとおりです。
6, 5, 3, 2, 6\r\n
つまり、ファイルにはWindowsの行末があります。
ファイルの位置は20になりますが、15になると思っていました。
ただし、ファイルを開くモードをバイナリ("rb"
)に変更すると、予想どおりファイルの位置は15になります。
これをグーグルで調べた後、なぜこれが起こっているのかについての手がかりを見つけることができませんでしたが、人々がfscanf()を使用しないことを提案していることがわかりました。
しかし、ファイルポインタが本来あるべき場所にない理由を知りたいのですが。