使用 gets 接受用户输入导致 Sublime 文本中的无限循环

Accepting user input using gets leads to infinite loop in Sublime text

当我在 Sublime 文本中 运行 这段代码时,它进入了一个无限循环而不是提示用户 'Enter something'。

print 'Enter something'
input_user = gets.strip
if(input_user == 'something')
    puts 'You are smart'
else
    puts 'You are not'
end
  1. 有人可以帮我理解为什么会这样吗?
  2. 除了 gets(不使用第三方库)之外,在 ruby 中是否还有其他有效的方法来接受用户输入?

没有明显的理由说明为什么这段代码会陷入无限循环。我 运行 它只是为了在 ruby 2.4.1p111 下踢球。代码按照描述的预期运行,没有无限循环。

这不是无限循环。它只是在等待输入数据。

要求用户输入是 CLI 应用程序的基本流程:

并且还使用 #gets 方法来捕获、存储和运算该输入。

Sublime 不允许输入数据,所以好像是无限循环。 此外,您看不到 Enter something,因为输出是 "enqueued on the stream"。您需要刷新输出才能看到它。看这个题目:How to print stdout immediately?

因此,要查看在 Sublime 中打印的第一行,请在 print (puts) 之后添加 STDOUT.flush

puts 'Enter something'
STDOUT.flush
input_user = gets.strip

现在,如果您从 Sublime (CMD + B) 构建,您可以看到打印的第一行,但执行仍然挂起,因为 Sublime 不获取输入。

为了在终端上进行适当的测试运行,即使没有冲洗,它也能正常工作。