2011-07-05 18 views
0

我試圖運行這個簡單的代碼:程序運行不是爲了

puts 4 
i = gets 
puts i 

它的「工作」,但控制檯要求一個字符串,就在這時,它打印4i

+3

您還沒有說完這句話。發生了什麼? ;) – Arsen7

+0

什麼語句?我是一個變數 –

+0

@Gilad Naaman:我認爲Arsen7很幽默。但是,請避免混淆我已將'4'和'i'強調爲代碼。 –

回答

4

gets之前添加flush電話:

$stdout.flush 
+0

而且每次我想要使用get時,都必須調用flush? –

+0

如果您需要屏幕始終處於最佳狀態,則應在每次打印時調用它。 – Yossi

0

作品,以便我使用紅寶石1.8.7,1.9.2和REE。你在使用什麼版本的Ruby和操作系統?

+0

我已經安裝了1.9.2 –

0

你希望在這裏完成什麼? 通常情況下,解釋器會在向您顯示輸出之前收集所有數據。它只是心不是bash的:)

0

我想你可以通過輸出緩衝被擊中。但是你的代碼示例並沒有顯示程序如何「請求」輸入,所以我猜你只是在Ruby開始之前輸入回答。然後你的ruby程序從輸入緩衝區讀取輸入,因爲數據不是直接從鍵盤讀取的。

您確定您的問題是由正是由於您向我們顯示的代碼造成的嗎?

通常,使用兩個不同的輸出流會導致終端按錯誤順序顯示的數據問題:例如STDINSTDERR。每個流可能決定在不同的時間刷新其數據。

如果您想要確保文本在發生之前顯示(如本例中所示),請使用'flush'命令,如Yossi所示。

1

而不是顯式調用$stdout.flush

$stdout.sync = true 
+0

我只需要調用一次? –