6

「入力バッファに改行が潜んでいる」fflush(stdin)というおなじみの問題に対処するための移植可能な方法ではないことを発見したので、使用する必要がある場合は次を使用しています。scanf

while((c = getchar()) != '\n' && c != EOF);

しかし、今日、cplusplus.com の fflushからメモした次の行に出くわしました。

fflush()...更新用に開いているファイル (つまり、読み取りと書き込みの両方のために開いているファイル) では、入力操作を実行する前に、出力操作の後にストリームをフラッシュする必要があります。これは、再配置 (fseek、fsetpos、rewind) または明示的に fflush を呼び出すことによって実行できます。

実際、私はそれを何度も読んだことがあります。そのため、サポートされている場合とscanf()同じ目的を果たすために、次のいずれかを単純に使用できるかどうかを確認したいと思います。fflush(stdin)

fseek(stdin,1,SEEK_SET);
rewind(stdin);

PS rewind(stdin)はバッファをフラッシュするのにかなり安全で実行可能のようですが、間違っていますか?

0 またはその場合に返される 1 以外のオフセットを使用できないため、fseek(stdin,0,SEEK_SET)話している場合は間違いを指摘する必要がありました。stdinftell()

4

1 に答える 1