>>946
scanf() が使いづらいのは

1. 字句解析
 文字列の並びから、ここまでが数値、ここまでが演算子、といったようにトークンを
 切り出す処理
2. 型変換
 文字列の "1111" を int 型の 1111 に変換するような処理

を一つの関数にまとめてしまっていて、エラー処理などが難しいからでしょう。

実はscanf() の書式指定はかなり強力で(正規表現ほどではないけど、かなりのことが
できる)使いこなすと便利なのですが、それでも

1. 字句解析は getc(), ungetc() で一文字ずつ拾いながら、トークンの切れ目を探す
2. トークンの切れ目が見つかったらところで、トークン種別を確定して itoa, sscanf()
 などで型変換

と 2 段階にした方がつぶしがきくので、よく使われます。