次のコードがどのように説明されるかを誰でも説明できますか?私はそれを本当に理解していません。
while((c = getchar()) != '\n' && c != EOF);
入力ストリームをフラッシュするために使用され、標準の C ライブラリ関数に置き換えることができることを知っています。
fflush(stdin)
次のコードがどのように説明されるかを誰でも説明できますか?私はそれを本当に理解していません。
while((c = getchar()) != '\n' && c != EOF);
入力ストリームをフラッシュするために使用され、標準の C ライブラリ関数に置き換えることができることを知っています。
fflush(stdin)
while((c = getchar()) != '\n' && c != EOF);
これは、入力文字が行末 (つまり、getchar()returned '\n) またはファイルの終わりまたはエラー状態 (つまり、getchar()returned EOF) に到達するまで読み取ります。
がキーボードから読み取っている場合stdinは、Enter キーを押すまで入力を破棄します。
EOF入力エラーが発生した場合、またはファイルの終わり条件をトリガーした場合 (Unix ではCtrl-D2 回入力することによって) 、チェックをオフにしておくと、無限ループが発生する可能性があります。
これはscanf()、整数を読み取るために使用した後などに役立ちます。を実行scanf("%d", &num);して入力すると、これらの 3 桁が読み取られます (値が に123格納されます) が、その後はすべて読み取られるまで待機します。上記の行を使用して、入力行の残りをスキップできます。123n
(代わりに、おそらくより良い方法は、 を使用して行全体を読み取り、 を使用fgets()してそれらを解析することsscanf()です。)
これは と同等ではありませんfflush(stdin)。C 標準に関する限り、fflush入力ストリームでの呼び出しには未定義の動作があります。
一部の実装では、 の動作が定義されていますfflush(stdin)。たとえば、GNU libc を使用するシステム (ほとんどの Linux システム):
入力ストリームの場合
fflush()、基になるファイルからフェッチされたが、アプリケーションによって消費されていないバッファリングされたデータを破棄します。
これは、行末まで入力を破棄することと同じではありません。また、それを使用すると、コードが移植できなくなります。
このコードは、ファイル (またはその他の入力) が開かれていると仮定すると、改行 (\n) またはファイルの終わり (eof) が見つかるまで、1 文字ずつ取得し続けます。
fflush は、開いているファイルのストリームをクリアするだけです。