次のコードがどのように説明されるかを誰でも説明できますか?私はそれを本当に理解していません。
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
格納されます) が、その後はすべて読み取られるまで待機します。上記の行を使用して、入力行の残りをスキップできます。123
n
(代わりに、おそらくより良い方法は、 を使用して行全体を読み取り、 を使用fgets()
してそれらを解析することsscanf()
です。)
これは と同等ではありませんfflush(stdin)
。C 標準に関する限り、fflush
入力ストリームでの呼び出しには未定義の動作があります。
一部の実装では、 の動作が定義されていますfflush(stdin)
。たとえば、GNU libc を使用するシステム (ほとんどの Linux システム):
入力ストリームの場合
fflush()
、基になるファイルからフェッチされたが、アプリケーションによって消費されていないバッファリングされたデータを破棄します。
これは、行末まで入力を破棄することと同じではありません。また、それを使用すると、コードが移植できなくなります。
このコードは、ファイル (またはその他の入力) が開かれていると仮定すると、改行 (\n) またはファイルの終わり (eof) が見つかるまで、1 文字ずつ取得し続けます。
fflush は、開いているファイルのストリームをクリアするだけです。