2014-02-21 42 views
1

我有下面的循環,它的行爲對我來說似乎很奇怪。直到循環卡住;表演奇怪?

這是一款BlackJack遊戲的一部分,它要求用戶輸入一個投注。如果下注超過了用戶的金額,那麼它會循環回去。

c等於500位置:

b = 90000000 
until b < c 
    puts "You have $" + c.to_s + "." 
    puts "How much do you want to bet? " 
    b = gets.to_i 
    if b < c 
    @bet = gets.to_i 
    else 
    puts "Nice try." 
    end 
end 

我設置b得高一些,以保證循環至少運行一次。當我開始循環並輸入比我擁有的更高的數字時,它會按照它應有的做法,並循環要求下注。但是,當我最終輸入一個有效的金額時,循環卡住了。

然後當我設置b到一個足夠低的數字,以便它跳過until一切工作正常。

有誰知道我的循環爲什麼會粘住?

+0

顛倒你的「直到」的邏輯。相反,使用'while b> = c'或簡單的'loop'和'break'來測試你的條件。直到否定邏輯,使其更難閱讀和理解。它是Ruby的一部分,但很少用於這個原因。 –

回答

3

這不是「粘」,它正在等待IO。

您在if b < c區塊內有第二個電話gets。你的循環正在執行最後的時間,你輸入一個值< c,你的if塊被輸入,並且你的程序正在等你讀更多的輸入。

你內心如果塊更改爲

if b < c 
    @bet = b 
else 
    puts "Nice try." 
end 

,你應該沒問題。

+0

謝謝你的工作,我真的應該抓住那個,哈。 – user3195786