2011-03-14 5 views
5

내가 다른 입력을 얻으려고 할 때 내가 가지고있는 두 번째 입력을 무시하는 이유가 궁금했습니다.루비에서 "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)의 중복 –

+0

디버깅하는 방법에 대한 힌트 스크립트는 http://stackoverflow.com/questions/3955688/how-do-i-debug-ruby-scripts –

답변

16

사용자 입력에 따라 줄 바꿈 문자가 나왔습니다. 그들은 "y"를 입력하는 동안 실제로 "y \ n"을 얻습니다. 문자열에 "chomp"메서드를 사용하여 개행을 중단해야만 의도 한대로 작동합니다. 뭔가 같은 :

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

예 : http://rubylearning.com/satishtalim/getting_input.html을 참조하십시오. – McStretch

-1

당신은() 얻을 사용하면 ... 인쇄 해당 문자열 ... P (STR)를 사용하여 보통 문자열이 마지막에 .. 씹는 \ n해야합니다! 방법은 그것을 제거하는 데 사용해야합니다 ...