/ / Domanda su "get" in ruby ​​- ruby, input, gets

Domanda su "ottiene" nel rubino - rubino, input, ottiene

Mi chiedevo perché, quando sto provando a ottenere input diversi, ignora il secondo input che avevo.

#!/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

Come puoi vedere, ho completamente ignorato la mia dichiarazione while.

Questo è un esempio di output.

Hello World!

What is the dog"s new name? bob

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

OK...

risposte:

16 per risposta № 1

Il problema è che stai ricevendo una nuova rigacarattere sul tuo input da parte dell'utente. mentre stanno inserendo "y" si ottiene effettivamente "yn". È necessario dividere la nuova riga usando il metodo "chomp" su stringa per farlo funzionare come previsto. qualcosa di simile a:

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

-1 per risposta № 2

una volta che usi gets () ... stampa quella stringa .. usando p (str) di solito la stringa avrà n alla fine .. chomp! metodo dovrebbe essere usato per rimuoverlo ...