>>432
scanf の * 書式指定子は「読み捨て」の指示だったね。
printf の * とは使い方が違うけど、ちゃんとある。
…存在をすっかり忘れてたよ。ありがとう。


>>433
カーニハン&パイクの『プログラミング作法』には
sprintfで書式指定文字列を作る方法が載ってるね。
下に示す例に比べれば手軽で分かりやすい。

入力文字幅がコンパイル時固定ならマクロを駆使して…

// マクロ名を「マクロの内容を表す文字列」に変換するマクロ関数
#define MACRO_TO_STR_SUB(name) #name
#define MACRO_TO_STR(name) MACRO_TO_STR_SUB(name)

#define WIDTH 15 // 入力制限字数(末尾の'\0'を含まない)

 char buf[WIDTH+1]; // +1 for '\0'
 scanf("%" MACRO_TO_STR(WIDTH) "s", buf);

こんな感じにできるけど、面倒でしょ。