5

別の入力にアクセスしようとすると、2番目の入力が無視されるのはなぜだろうと思っていました。

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

2 に答える 2

17

問題は、ユーザーからの入力で改行文字を取得していることです。彼らが「y」を入力している間、実際には「y\n」を取得しています。意図したとおりに機能させるには、文字列で「chomp」メソッドを使用して改行を切り落とす必要があります。何かのようなもの:

speak_or_no = gets
speak_or_no.chomp!
while speak_or_no == "y"
  #.....
end
于 2011-03-14T20:30:49.993 に答える
-1

gets() を使用すると... その文字列を出力します.. p(str) を使用すると、通常、文字列の最後に \n が付きます.. むしゃむしゃ!メソッドを使用して削除する必要があります...

于 2013-05-14T13:37:48.817 に答える