我不明白Ruby为什么不中断这个while循环:
while
i = nil while true i = gets if i == 5 break end puts i end
请解释原因。
dba5bblo1#
你的代码不工作是因为你的循环在检查i == 5,但是gets总是以字符串的形式返回用户的输入,所以如果input是5,gets将以"5"的形式返回。它不会将其转换为break所需的5。您需要将输入从字符串转换为数字。在用户输入中使用String#to_i,代码将按预期工作。
i == 5
gets
5
"5"
String#to_i
i = nil while true i = gets.to_i if i == 5 break end puts i end
你也可以引入第二个变量j,用来检查输入是否为5,并保留i,这样如果用户输入的是一个字母,这个字母就会被打印到屏幕上,而不是0:
j
i
0
while true i = gets.chomp j = i.to_i if j == 5 break end puts i end
另一种方法是使用Kernel#loop:
Kernel#loop
loop do i = gets.chomp j = i.to_i break if j == 5 puts i end
另一种方法是使用until循环:
until
j = 1 until j == 5 i = gets.chomp j = i.to_i puts i end
1条答案
按热度按时间dba5bblo1#
你的代码不工作是因为你的循环在检查
i == 5
,但是gets
总是以字符串的形式返回用户的输入,所以如果input是5
,gets
将以"5"
的形式返回。它不会将其转换为break所需的5
。您需要将输入从字符串转换为数字。在用户输入中使用String#to_i
,代码将按预期工作。你也可以引入第二个变量
j
,用来检查输入是否为5
,并保留i
,这样如果用户输入的是一个字母,这个字母就会被打印到屏幕上,而不是0
:另一种方法是使用
Kernel#loop
:另一种方法是使用
until
循环: