Рубиновая часовая петля не работает должным образом (Семь языков за семь недель) - PullRequest
2 голосов
/ 30 марта 2012

Только что начал работать над рубиновой главой в "Семи языках за семь недель" мистера Тейта.

Для бонусного вопроса в первый день я должен сгенерировать «случайное» число, прочитать догадку пользователя из входных данных и сравнить предположение с моим «случайным» числом, а затем предложить пользователю продолжить гадание с помощью begin петля. Однако цикл кажется завершенным независимо от того, какое значение строки вводит пользователь.

# file : day1_bonus.rb
# Seven Languages In Seven Weeks
#
# Guess a random number!

again = "y"

begin
  print "Enter a number between 0 and 9: "
  number = gets.to_i
  randNum = rand(10)

  if number == randNum
    puts 'You guessed correctly!'
  else
    puts 'You guessed incorrectly.'
  end

  print "Play again? (y/n): "
  again = gets
  again.chomp   # remove carriage return
end while again == "y"

Выход:

Enter a number between 0 and 9: 3
You guessed incorrectly.
Play again? (y/n): y
nil

1 Ответ

4 голосов
/ 30 марта 2012

Существует две версии chomp.Обычный chomp и взрыв chomp!.Разница в том, что обычная функция возвращает измененную строку (и оставляет исходный текст в покое), а версия bang изменяет исходную строку на месте.

Итак, в своем коде вы сжимаете возврат каретки и выбрасываете эту работу.Либо сделать это

again = again.chomp

или это

again.chomp!
...