(char) へのキャストは別に要らないんじゃね?
規格的にはどうなんだろう。
%c は char -> int で変換された(可変個引数の仕様により変換された)値しか受け付けないのか、
それとも fgetc の返す EOF 以外の値(つまり符号無しの値)をそのまま渡して良いのか。