数値を入力したのに先に進まない([Ctrl]+[c]を押さないと終わらない)


【症状】

scanf で数値を読み込むのに,なぜかどれだけ入力しても終わらない.
ただ,[Ctrl]+[c] を押す(Ctrl キーを押しながら c を押す)と終わる.

【原因】

scanf の書式指定部分の末尾に不要な \n や空白が書かれている.
例えば,整数を 1 個読み込むのに次のような書き方をしてしまっている:

scanf("%d\n", &x);
scanf("%d ", &x);

scanf では空白や改行(\n)を数値の区切りとして使用するため,%d で整数を読み込もうとする際にそれよりも前に登場する空白や改行は無視されます(読み飛ばされます).

問題は,上のように %d よりも右に空白や改行を指定している場合で,%d までの解釈は無事に終わるのですが,その後の空白や改行については何か別の文字(読み飛ばしの対象とならない文字)が登場しないと「読み飛ばし」が終わらないことになってしまい,結果として無限ループのようになってしまいます.

【解決策】

%d の右にある \n や空白を削除する.