/ /ルビーの「gets」に関する質問-ruby、input、gets

ルビーの "取得"に関する質問 - ルビー、入力、取得

別の入力にアクセスしようとすると、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...

回答:

回答№1は16

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

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

回答№2の場合は-1

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