Логическое значение в операторе while вместо «while true do» не работает - PullRequest
0 голосов
/ 14 января 2019

Я попытался создать цикл, используя переменную с логическим значением true. Я ожидал, что значение изменится на false, если пользователь введет "exit", и следующая итерация не произойдет, потому что оператор while "isTrue == true" больше не true.

isTrue = true

while isTrue == true do
  input = gets
  if input == "exit" then    # exitと入力されたら
    isTrue = false           # プログラムを終了
  else
    puts "LOOPING..."
  end
end

puts "ENDING NOW"

Но, похоже, это не работает, а просто продолжает работать. Почему мой код не работает?

Ответы [ 4 ]

0 голосов
/ 14 января 2019

Ваша программа может быть сделана более компактной:

while gets.chomp != 'exit' do
  puts 'LOOPING...'
end

puts 'ENDING NOW'

Эта версия программы делает то же самое, что и ваша, но она намного меньше и быстрее.

Удачи в изучении Ruby!

0 голосов
/ 14 января 2019

Используйте gets.chomp вместо gets, чтобы удалить "\ n", и он будет работать. Таким образом, вы не будете иметь дело с «выходом \ n», исходящим из gets

0 голосов
/ 14 января 2019

rstrip поможет вам в этом случае.

Ваш ввод на самом деле не совсем "выход", так как вы нажимаете кнопку возврата.

Код ниже будет работать.

isTrue = true

  while isTrue == true do
    input = gets
    if input.rstrip == "exit" then    # exitと入力されたら
      isTrue = false           # プログラムを終了
    else
      puts "LOOPING..."
    end
  end

puts "ENDING NOW"

См. - Стандартные документы

0 голосов
/ 14 января 2019
[1] pry(main)> input = gets
exit
=> "exit\n"
[2] pry(main)>

Это потому, что вход gets будет содержать \n. Вы должны иметь дело с этим.

Как это:

[2] pry(main)> input.chomp
=> "exit"

Обычно люди пишут так:

[3] pry(main)> input = gets.chomp
exit
=> "exit"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...