scanfは予期しない入力があると無限ループに陥る(C学習中)

今日覚えたこと

scanf で int 型の変数に値を受け取り、ある値と等しければ break する。それまで while(1) で回す。

というコードを書いていた。こういうの。

int hoge;
int moga = 7;

while(1) {
    scanf("%d", &hoge)
    if (hoge < moga) {
        // hogeが小さいとかどーとか
    } else if (moga < hoge) {
        // hogeが大きいとかどーとか
    } else {
        break;
    }
}

この処理に数字を渡した場合、意図通り動く。しかし、英字を渡すと、プログラムが終了しなくなる。

これは、予期しない入力に対する scanf の振る舞いのため。次の2つの対処をする。

  1. scanfの戻り値を利用して、無限ループを回避する
  2. 何らかの方法で、バッファをクリアする

宿題

わからないこと

  • sscanfを代わり使った回避方法