成瀬です。

結論から言うと、読み込みの途中でset_encodingを使ってはいけません。

詳細は[ruby-list:45988]のスレッドを見てください。

大田黒俊夫 wrote:
> # $stdin.set_encoding("Shift_JIS") として標準入力の文字コードを変更すると,
> # その直後の $stdin のストリームにはすでに \n が入っていて,$stdin からの
> # 入力を待たずに,ただちに次の行に制御を移し,終了してしまいます.

-- 
NARUSE, Yui  <naruse / airemix.jp>