我的代码应该提示用户输入数字,直到他们输入“停止”,然后返回输入的数字总数。我用两种方式编写了这个程序,当输入“stop”时,这两种方式都无法打破循环。
我的第一次尝试是使用until循环,尽管我觉得控制流效果不太好。我的第二个使用“直到真实”和“打破”。 我将 gets 的结果存储在一个变量中,以便可以将其转换为整数,并且我已经测试了在转换“stop”时删除该变量。
# 2nd attempt
total = 0
while true
puts "Give me a number"
gets_var = gets
if gets_var == "stop"
break
else
total += gets_var.to_i
end
end
puts total
# 1st attempt
total = 0
gets_var = 0
until gets_var == "stop"
puts "Give me a number"
gets_var = gets
total += gets_var.to_i
end
puts total
我希望在提示结束循环并返回总数时输入“stop”。在任何情况下,“停止”都不会打破循环。
为什么我的循环无法中断?
最佳答案
只需使用 String#chomp
方法即可返回不带新行分隔符的字符串:
gets_var.chomp == "stop"
https://ruby-doc.org/core-2.2.0/String.html#method-i-chomp
您可以在irb
中手动查看:
irb(main):011:0> gets_var = gets
test
=> test
irb(main):012:0> pp gets_var
"test\n"
=> test
字符串末尾有一个换行符 (\n
)。当您使用 gets
时,它总是出现。
关于使用 gets 时,Ruby 循环无法中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198178/