>>342
eof()は実際に読ませてみないと判定してくれないから、
最初にfin >> c;を実行して、eofだったかを判定する
eofならループを抜ける(入力値は無効)最初から空なら、ループを実行しない。
eofでなければ、有効な文字を取得できたと判断する

こういうロジックは、普通に使われてるんだけどね^^