Как использовать логическое значение для проверки пользовательского ввода - PullRequest
0 голосов
/ 24 апреля 2020

Вот часть моего кода, первая часть оператора works работает, но я хотел бы, чтобы появилось отдельное сообщение для нечислового ввода, такого как "$boo", "ten", "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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Если я правильно понимаю ваш вопрос, вы просто хотите разрешить только положительные числа. В этом случае вы можете использовать метод 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
0 голосов
/ 24 апреля 2020

Если вы проверяете уже конвертированное число, невозможно определить, был ли он изначально действительным форматом или нет. Нужно как-то сравнивать с начальным вводом.

Одно из решений:

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

...