2011-03-14 15 views
5

Me preguntaba por qué cuando estoy tratando de obtener entradas diferentes que ignora la segunda entrada que tuve.Pregunta sobre "se pone" en ruby ​​

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

Como puede ver, ignoró por completo mi declaración while.

Esto es una salida de muestra.

Hello World! 

What is the dog's new name? bob 

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

OK... 
+0

posible duplicado de [función de impresión en ruby] (http://stackoverflow.com/questions/4415834/print-function-in-ruby) –

+0

Para obtener sugerencias sobre cómo depurar su secuencia de comandos, consulte http://stackoverflow.com/questions/3955688/how-do-i-debug-ruby-scripts –

Respuesta

16

El problema es que está recibiendo un carácter de nueva línea en su entrada del usuario. mientras están ingresando "y" en realidad está obteniendo "y \ n". Tienes que cortar la nueva línea usando el método "chomp" en la cadena para que funcione como lo deseas. algo así como:

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

Ejemplo: http://rubylearning.com/satishtalim/getting_input.html – McStretch

-1

una vez que se utiliza() ... impresión de esa cadena usando p .. (str) normalmente cordón tendrá \ n al final .. masticar! se debe usar el método para eliminarlo ...