...scanf がスキャンを停止する場合

提供: RAD Studio
移動先: 案内検索

Scanf, wscanf への移動


...scanf 関数は、通常のフィールド終了文字(ホワイトスペース)に到達する前に特定の入力フィールドのスキャンを停止したり、あるいは処理を完全に終了することがあります。

停止して次の入力フィールドへ移る場合

各種 ...scanf 関数は、以下の場合に現在の入力フィールドのスキャンおよび格納を停止し、次の入力フィールドへ移ります。

  • 形式指定子中の % の後に代入抑制文字 (*)が現れたとき。 現在の入力フィールドはスキャンされますが格納されません。
  • フィールド分の文字数の読み込みが終わったとき。
  • 読み込んだ次の文字が現在の形式に変換できなかったとき(10 進数形式の場合の A など)。
  • 入力フィールド内の次の文字が検索セットに含まれないとき(または反転検索セットに含まれるとき)。

このいずれかの理由で現在の入力フィールドのスキャンを停止した場合、...scanf は、次の文字がまだ読み込まれておらず、次のどちらかであると想定します。

  • 後続の入力フィールドの最初の文字
  • 入力に対するその後の読み取り操作の最初の文字

終了する場合

各種 ...scanf 関数は、以下の状況になると終了します。

  • 入力フィールド内の次の文字が、形式文字列中の対応するホワイトスペース以外の文字と矛盾しているとき。
  • 入力フィールド内の次の文字が EOF であるとき。
  • 形式文字列が終了したとき。

形式指定子の構成要素ではない文字シーケンスが形式文字列中に存在する場合、その文字シーケンスは入力フィールド内の現在の文字のシーケンスと一致するものでなければなりません。

...scanf 関数は、その一致し字群をスキャンしますが、格納はしません。

一致しない文字が見つかると、その文字は ...scanf 関数で読み込まれなかったものとして入力フィールド内に残されます。

関連項目