2014-02-21 46 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