> scanfでエラー発生すると、ストリームが自動的にクリアされないので

ん、ungetc でストリームを捏造することが問題なんじゃなかったの?