2016-07-30 3 views
0

я не мог понять проблему с этим кодом:Пока цикл не работает. Включает в себя строку и преобразование в верхний регистр

select = false 
while (!select) 
    print "What animal do you want to adopt? (Cat/Dog/Fish): " 
    your_animal = gets 
    if your_animal.upcase == "CAT" or your_animal.upcase == "DOG" or your_animal.upcase == "FISH" 
    puts "Ah, you want #{your_animal}." 
    select = true 
    else 
    puts "Please pick from any of the three animals and make sure it is spelled correctly." 
    end 
end 

if заявления с тремя условиями не работает, и буду выполнять код в else заявлении даже если я напишу правильный ответ для оператора if, который будет активирован.

Любая помощь будет оценена по достоинству.

ответ

3

Изменить

your_animal = gets 

в

your_animal = gets.chomp 

Причина заключается в том, что gets возвращает всю строку ввода, в том числе завершающего возврата каретки.

Sidenote: вместо

your_animal.upcase == "CAT" or 
    your_animal.upcase == "DOG" or 
    your_animal.upcase == "FISH" 

можно использовать:

%w(CAT DOG FISH).include? your_animal.upcase 
+0

... и 'до (выбрать)' вместо 'в то время как (! Выберите)'. Кроме того, если вы намерены преобразовать результат 'gets' в целое число (не здесь), вы можете написать либо' gets.chomp.to_i', либо просто 'gets.to_i', поскольку' .to_i' завершает преобразование как можно скорее поскольку он попадает на символ, отличный от цифры (или конца строки). То же самое с 'to_f'. –

+0

Это сработало отлично! Я прочитал это после того, как вы упомянули об этом, и я понимаю, почему; потому что, когда вы вводите ввод, строка, которую он получает, составляет, например: «CAT » Это не то же самое, что «CAT». Спасибо, это имеет смысл! –

+0

Alex, нет, 'get' возвращает' 'CAT \ n" '. –

 Смежные вопросы

  • Нет связанных вопросов^_^