Question about “gets” in ruby [duplicate]

99封情书 提交于 2019-12-19 08:03:51

问题


I was wondering why when I'm trying to gets to different inputs that it ignores the second input that I had.

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

As you can see it completely ignored my while statement.

This is a sample output.

Hello World!

What is the dog's new name? bob

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

OK...

回答1:


The problem is you are getting a newline character on your input from the user. while they are entering "y" you are actually getting "y\n". You need to chomp the newline off using the "chomp" method on string to get it to work as you intend. something like:

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



回答2:


once you use gets()... print that string.. using p(str) usually string will have \n at the end.. chomp! method should be used to remove it...



来源:https://stackoverflow.com/questions/5304055/question-about-gets-in-ruby

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!