/ / Питання про “отримує” в рубіні - ruby, input, gets

Питання про "отримує" в рубіні - рубін, вхід, отримує

Мені було цікаво, чому, коли я намагаюся потрапити на різні входи, це ігнорує другий вхід, який я мав.

#!/usr/bin/env ruby
#-----Class Definitions----

class Animal
attr_accessor :type, :weight
end

class Dog < Animal
attr_accessor :name
def speak
puts "Woof!"
end
end

#-------------------------------

puts
puts "Hello World!"
puts

new_dog = Dog.new

print "What is the dog"s new name? "
name = gets
puts

print "Would you like #{name} to speak? (y or n) "
speak_or_no = gets

while speak_or_no == "y"
puts
puts new_dog.speak
puts
puts "Would you like #{name} to speak again? (y or n) "
speak_or_no = gets
end

puts
puts "OK..."

gets

Як бачите, це повністю проігнорувало моє твердження while.

Це зразок вихідних даних.

Hello World!

What is the dog"s new name? bob

Would you like bob
to speak? (y or n) y

OK...

Відповіді:

16 за відповідь № 1

Проблема в тому, що ви отримуєте новий рядокна введенні користувачем символу. поки вони вводять "y", ви фактично отримуєте "yn". Вам потрібно відрізати новий рядок методом "chomp" у рядку, щоб він працював так, як ви задумали. щось на зразок:

speak_or_no = gets
speak_or_no.chomp!
while speak_or_no == "y"
#.....
end

-1 для відповіді № 2

як тільки ви використовуєте get () ... надрукувати цей рядок .. за допомогою p (str) зазвичай рядок буде мати n в кінці .. chomp! метод слід використовувати для його видалення ...