...scanf がスキャンを停止する場合
Scanf, wscanf への移動
...scanf 関数は、通常のフィールド終了文字(ホワイトスペース)に到達する前に特定の入力フィールドのスキャンを停止したり、あるいは処理を完全に終了することがあります。
停止して次の入力フィールドへ移る場合
各種 ...scanf 関数は、以下の場合に現在の入力フィールドのスキャンおよび格納を停止し、次の入力フィールドへ移ります。
- 形式指定子中の % の後に代入抑制文字 (*)が現れたとき。 現在の入力フィールドはスキャンされますが格納されません。
- フィールド幅分の文字数の読み込みが終わったとき。
- 読み込んだ次の文字が現在の形式に変換できなかったとき(10 進数形式の場合の A など)。
- 入力フィールド内の次の文字が検索セットに含まれないとき(または反転検索セットに含まれるとき)。
このいずれかの理由で現在の入力フィールドのスキャンを停止した場合、...scanf は、次の文字がまだ読み込まれておらず、次のどちらかであると想定します。
- 後続の入力フィールドの最初の文字
- 入力に対するその後の読み取り操作の最初の文字
終了する場合
各種 ...scanf 関数は、以下の状況になると終了します。
- 入力フィールド内の次の文字が、形式文字列中の対応するホワイトスペース以外の文字と矛盾しているとき。
- 入力フィールド内の次の文字が EOF であるとき。
- 形式文字列が終了したとき。
形式指定子の構成要素ではない文字シーケンスが形式文字列中に存在する場合、その文字シーケンスは入力フィールド内の現在の文字のシーケンスと一致するものでなければなりません。
...scanf 関数は、その一致し字群をスキャンしますが、格納はしません。
一致しない文字が見つかると、その文字は ...scanf 関数で読み込まれなかったものとして入力フィールド内に残されます。