2016-11-19 3 views
0

関数がその改行と入力が区別できないため、getchar()またはfflush(stdin)を使って改行または前の入力を残しました。 scanf機能で%sを使用したときは、これらは必要ありませんでした。 %cまたは%dを同じ機能に使用すると、なぜそれが必要なのですか?getchar()とfflush(stdin)の動作が混乱しています

+2

'fflush(stdin)'は未定義の動作です – yano

答えて

1

実際、fflush()には入力ストリームの動作が定義されていないため、実装定義の動作がいくつかあります。また、fpurge()glibcにあります。

ルールscanf()を使用して、それはそれは空白をキャプチャする、または空白が先行している場合、それらすべてを無視することができますように異なる動作をどの%cを使用している場合を除きisspace()、によって返される空白文字を見つけたとき、それが停止することです。

また、gets()の機能は危険で、最近は標準から削除されていますので、使用しないでください。例として参照することもできます。それができるならばgets()の改良版である

fgets()機能は、今までに撮影した文字の数は、あなたがする必要はありませんので、それの値が第2のパラメータだ超えていない場合、すなわち、最終'\n'をキャプチャしませんそれ以降は何でもをフラッシュしてください。

scanf()は、最後の'\n'を入力バッファに残すだけでなく、それに続く空白も残すことを考慮する必要があります。したがって、通常はgetchar()で十分ではありません。を確実にするために、getchar()には空白が多く残っている必要があります。

関連する問題