使用 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
- 有人可以帮我理解为什么会这样吗?
- 除了
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 不获取输入。
为了在终端上进行适当的测试运行,即使没有冲洗,它也能正常工作。
当我在 Sublime 文本中 运行 这段代码时,它进入了一个无限循环而不是提示用户 'Enter something'。
print 'Enter something'
input_user = gets.strip
if(input_user == 'something')
puts 'You are smart'
else
puts 'You are not'
end
- 有人可以帮我理解为什么会这样吗?
- 除了
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 不获取输入。
为了在终端上进行适当的测试运行,即使没有冲洗,它也能正常工作。