Я следую учебному пособию LearnRubyTheHardWay и испытываю трудности с изменением упражнения 29 . Все работает нормально, если я определяю переменные как (как в учебнике):
people = 100000
cats = 34
dogs = 56
Однако, если я попытаюсь получить переменные из STDIN, например:
puts "How many people are here?"
people = STDIN.gets.chomp()
puts "How many cats?"
cats = STDIN.gets.chomp()
puts "And how many dogs?"
dogs = STDIN.gets.chomp()
Операторы равенства возвращают ложные результаты, как если бы они только вычисляли результаты, используя первые две цифры чисел. Поэтому, если я набираю 100000000 для людей и 11, 12 или 13 для кошек, методы возвращают «Слишком много кошек ...». Если я набираю 150000000 для людей и что-либо <15 для кошек, они возвращают «Не много кошек ..» должны изменить </p>
dogs += 5
до
dogs += "5"
в противном случае я получаю следующую ошибку: в `+ ': невозможно преобразовать Fixnum в String (TypeError)
Если я оставлю двойные кавычки на месте и вернусь к людям = 10000, я получу следующую ошибку: в `+ ': невозможно привести строку в Fixnum (TypeError)
Скажем так, у меня нет проблем с кодом в учебнике, просто попробуйте узнать, что вызывает ошибки, вызванные методами STDIN. Я заглянул в RubyDoc.org , чтобы узнать, является ли это проблемой с классами fixnum, integer или string или чем-то связанным с методами chomp или gets, но не смог найти причину. Я также пытался to_i и to_s до или после, но не получил никакого результата.
Полный исходный код файла приведен ниже:
puts "How many people are here?"
people = STDIN.gets
puts "How many cats?"
cats = STDIN.gets
puts "And how many dogs?"
dogs = STDIN.gets
#people = 100000
#cats = 34
#dogs = 56
puts "So, %d people, %d cats and %d dogs, huh?" % [people,cats,dogs]
if people < cats
puts "Too many cats! The world is doomed!"
end
if people > cats
puts "Not many cats! The world is saved!"
end
if people < dogs
puts "The world is drooled on!"
end
if people > dogs
puts "The world is dry!"
end
dogs += "5"
puts "Now there are #{dogs} dogs."
if people >= dogs
puts "People are greater than or equal to dogs."
end
if people <= dogs
puts "People are less than or equal to dogs."
end
if people == dogs
puts "People are dogs."
end