参考:scanf の動作 詳細 戻り値

fscanf と fflush関数

Enterまでのキー入力情報は、 stdinで管理される標準入力バッファ と呼ばれる内部の記憶場所に記憶されます。
こらは、stdinのストーリムで管理さ、fsacnfの入力用フォーマットの文字列で読み取られます。
標準入力バッファの内容がこの入力用フォーマットに合わないと、 fscanfの処理が終わります。
この時、標準入力バッファの中に、データが残ったままになっており、 次の入力ではすぐ入力待ちにならずに、このバッファの内容が読み取り対象になります。 場合によって、このバッファにデータが残っていると、次の入力に支障がある場合があります。
このような時のために、
 このバッファの読み取り残しをクリアする fflush(バッファを管理するストリーム)命令があります。 fflush関数は、stdio.hをインクルードすることで使えます。
次の実行例を行うプログラムで説明します。(赤が入力)

2つ入力>10 ab
1個入力できました
10, 2
2つ入力>0個入力できました
2つ入力>30 40
2個入力できました
30, 40


標準入力バッファの記憶内容を以下に示す。 (データが記憶される範囲をこの色で示す)