直到循环卡住;表现得很奇怪?

时间:2014-02-21 14:18:52

标签: ruby ruby-1.9.3

我有下面的循环,它的行为对我来说似乎很奇怪。

这是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时,一切正常。

有谁知道为什么我的循环会粘住?

1 个答案:

答案 0 :(得分:3)

它不是'坚持',它在等待IO。

您在gets区块内第二次拨打if b < c。你的循环正在执行最后一次,你输入一个值&lt; c,输入了if块,程序正在等待您阅读更多输入。

将内部if块更改为

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

你应该没事。