while循环语句中的布尔值而不是"while true do"不起作用



我试图使用设置为布尔值的变量创建一个循环true。我预计如果用户输入 "exit" 的值会更改为 false,并且下一次迭代不会发生,因为 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"

但它似乎不起作用,只是不断循环。为什么我的代码不起作用?

使用 gets.chomp 而不是 gets 来删除尾部 "",它将起作用。因此,您不会处理来自gets <<br>div class="one_answers" 的 "exit>

[1] pry(main)> input = gets
exit
=> "exitn"
[2] pry(main)>

这是因为gets输入中将包含一个n。你需要处理它。

喜欢这个:

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

通常 ppl 是这样写的:

[3] pry(main)> input = gets.chomp
exit
=> "exit"
在这种情况下,

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"

参考 - 标准文档

您的程序可以更加紧凑:

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

此版本的程序与您的程序完全相同,但更小,更快。

祝你在学习 Ruby 时好运!

最新更新