如何使用布尔值进行用户输入验证



这是我的代码的一部分,˚语句的第一部分可以工作,但我希望为非数字输入(如"$boo"、"ten"one_answers"idk"(显示一条单独的消息。

puts "Candy Sold: "
candy_sold = gets.chomp.to_i
until candy_sold >= 0 
if candy_sold < 0
puts "Please enter a positive number:"
candy_sold = gets.chomp.to_i
elsif candy_sold.class == String      # This is where the issue is
puts "Please enter a positive number:"
candy_sold = gets.chomp.to_i
end
end

如果我理解你的问题是正确的,你只想只允许正数。在这种情况下,可以使用具有范围的cover?方法。

puts "Candy Sold: "
candy_sold = gets.chomp
until ('0'..'9').cover? candy_sold
puts "Please enter a positive number"
candy_sold = gets.chomp
end
Candy Sold: 
> Hello
=> Please enter a positive number
> -97
=> Please enter a positive number
> -0
=> Please enter a positive number
> 1
=> nil

如果检查已转换的数字,则无法判断它最初是否为有效格式。你必须以某种方式与初始输入进行比较。

解决方案之一:

ask_for_amount = true
while ask_for_amount
candy_number_input = gets.chomp.strip
candy_sold = candy_number_input.to_i
if candy_number_input != candy_sold.to_s
puts "Please enter a valid positive number:"
elsif candy_sold < 0
puts "Please enter a positive number:"
else
ask_for_amount = false
end
end

最新更新