Thinkers'Studio
JavaとC言語の自習ツール
入力時に不要なデータをスキップ(scanf,sscanf,fscanfのTips)

scanf, sscanf, fscanf での代入抑止指定

 入力データに含まれるがプログラムで使わないデータ項目は、ダミー変数に読み込んだ上で参照しない方法がよく使われますが、代入禁止文字 * を使うと、必要なデータだけを変数に入力することができます。
 変換仕様の % の後ろに * を指定すると、代入抑止の指示となります。
 「指定した書式で読み込みはするが、それを代入しない」、つまり読み捨ての指定です。

scanf の例 】
scanf( "%*2c%d", &flightnum );
 として、キーボードから飛行機の便名(例 "JL7081" や "UA827")を指定します。
 すると、先頭の2文字を読み捨てて、後ろのフライト番号が変数 flightnum に読み込まれます。
sscanf の例 】
 文字列 datastr に「月日と売上金額」(例 "10/16 35400")が入っているとします。
 月別売上集計の処理をするなら、日付部分は不要なので、たとえば次のように書きます。
sscanf( datastr, "%d%*c%*d %d", &month, &uriage );
 すると、"/dd" の部分をスキップし、その前後のデータを変数 month と uriage に読み込むことができます。
 次の書き方でも構いません。 "/" は書式文字列の一部とし、"dd"をスキップする指定です。
sscanf( datastr, "%d/%*d %d", &month, &uriage );

 fscanf でも同様の使い方ができます。

(今週のクイズです)
 scanf, sscanf, fscanf の戻り値は、入力に成功した項目の数です。
 では、上に挙げた代入抑止の 2つの例で、scanf, sscanf はそれぞれどんな値を返すでしょうか?
  (答えは、次の C言語の Tips で ・・・ )

前回 クイズはありませんでした。