2011-03-14 30 views
5

我想知道为什么当我试图获取不同的输入时,它忽略了我的第二个输入。关于ruby中“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... 
+0

可能重复的[打印功能在红宝石](http://stackoverflow.com/questions/4415834/print-function-in-ruby) – 2011-03-14 22:26:13

+0

关于如何调试您的脚本,请参阅http://stackoverflow.com/questions/3955688/how-do-i-debug-ruby-scripts – 2011-03-14 22:29:39

回答

16

问题是你从用户的输入中得到一个换行符。当他们进入“Y”时,你实际上变得“Y \ N”。您需要使用字符串上的“chomp”方法来对新行进行chomp命令,以使其按照您的意图工作。是这样的:

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

示例:http://rubylearning.com/satishtalim/getting_input.html – McStretch 2011-03-14 20:31:43

-1

一旦你使用gets()... 打印该字符串..用P(STR) 通常字符串具有\ n在最后..的Chomp!方法应该用来删除它...