2011-07-05 5 views
0

に私はこの単純なコードを実行しようとした:それは「作業」だプログラムの実行がないため

puts 4 
i = gets 
puts i 

が、コンソールは、文字列を要求し、ただ、それがために4i

+3

あなたは文を完了していません。何が起こった? ;) – Arsen7

+0

どのような文章ですか?私は変数です –

+0

@Gilad Naaman:私はArsen7がユーモラスであると思います。しかし、混乱を避けてください。私は '4'と' i'をコードとして強調表示しています。 –

答えて

4

getsflush呼び出しを追加します。

$stdout.flush 
+0

そして、私は取得を使用するたびにフラッシュする必要がありますか? –

+0

画面を常に更新する必要がある場合は、印刷するたびに呼び出す必要があります。 – Yossi

0

作品を印刷します私はルビー1.8.7、1.9.2とリーを使用しています。どのバージョンのルビーとオペレーティングシステムをお使いですか?

+0

私は1.9.2をインストールしました –

0

あなたはここで何を達成したいですか? 通常、インタプリタは出力の前にすべてのデータを収集します。これは単に、ありえないbashのだ:)

0

私はあなたが出力バッファリングでヒットすることができると思います。しかし、あなたのコード例では、プログラムが入力を「尋ねる」方法を示していないので、rubyが起動する直前に答えを入力すると思います。ルビプログラムは入力バッファから入力を読み込みます。データはキーボードから直接読み込まれません。

正確にこのコードが原因で問題が発生していますか?

通常、端末に表示されるデータの順序が間違っているのは、2つの異なる出力ストリーム、たとえばSTDINSTDERRを使用することによって発生します。各ストリームは、異なる時間にそのデータをフラッシュすることを決定することができる。

何かが起きる前にテキストが表示されるようにしたい場合(この例のように)、Yossiが示唆するように 'flush'コマンドを使用します。

1

代わりに、明示的に$stdout.flushを呼び出す:

$stdout.sync = true 
+0

そして私はそれを一度だけ呼び出す必要がありますか? –

関連する問題