ほとんどの関数に戻り値があること説明をしました。
fscanf(scanfも同じ)も、戻り値をもっています。
この戻り値は、『変数にセット設定できたデータの個数』です。
(正確にいうと変数とは限りません。引数で指定した『アドレスが指し示す記憶域』にセットした個数です。)以下に
3つの実行例と、そのプログラムを示します。
2つ入力>10 20 2個入力できました 10, 20 2つ入力>30 40 2個入力できました 30, 40 |
2つ入力>10 20 30 40 2個入力できました 10, 20 2つ入力>2個入力できました 30, 40 |
2つ入力>10 a 30 40 1個入力できました 10, 2 2つ入力>0個入力できました 3, 4 |
2回に分けたキー入力(赤)で、/*1*/と/*3*/のそれぞれのfscanfで、戻り値の2が変数nにセットされいいます。 2は、2つの変数に設定したという2です。 | 1回でキー入力(赤)しています。/*3*/では、バッファに残っているので入力待ちになりません。それを読み取って2つの変数にセットできているので、戻り値が2になっています。 | 1回でキー入力(赤)しています。%の指示に合う範囲しか読み取らないので、/*1*/のfscanfの戻り値はセットできた個数の1が戻り値になっています。 /*3*/では残ったバッファ内容が%dに合わないので、変数にセットされずに戻り値は0になっています。 |
標準入力バッファの記憶内容を以下に示す。 (データが記憶される範囲をこの色で示す)