2011-03-14 6 views
5

में "हो जाता है" के बारे में प्रश्न मैं सोच रहा था कि जब मैं अलग-अलग इनपुट प्राप्त करने की कोशिश कर रहा हूं कि यह मेरे द्वारा किए गए दूसरे इनपुट को अनदेखा करता है।रूबी

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

आप देख सकते हैं यह पूरी तरह से मेरी जबकि बयान को नजरअंदाज कर दिया।

यह एक नमूना आउटपुट है।

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- स्क्रिप्ट –

उत्तर

16

समस्या यह है कि आप उपयोगकर्ता से अपने इनपुट पर एक न्यूलाइन चरित्र प्राप्त कर रहे हैं। जबकि वे "वाई" में प्रवेश कर रहे हैं, आप वास्तव में "वाई \ n" प्राप्त कर रहे हैं। जब आप इरादा रखते हैं तो इसे काम करने के लिए आपको स्ट्रिंग पर "चॉम्प" विधि का उपयोग करके नई लाइन को बंद करना होगा। कुछ की तरह:

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

उदाहरण देखें: http://rubylearning.com/satishtalim/getting_input.html – McStretch

-1

एक बार आप का उपयोग हो जाता है() ... प्रिंट कि स्ट्रिंग .. पी (एसटीआर) का उपयोग कर आमतौर पर स्ट्रिंग \ N अंत में .. chomp होगा! इसे हटाने के लिए विधि का उपयोग किया जाना चाहिए ...