我尝试运行这个简单的代码:
puts 4
i = gets
puts i
它正在“工作”,但是控制台要求输入一个字符串,然后打印4
和i
答案 0 :(得分:4)
在flush
之前添加gets
来电:
$stdout.flush
答案 1 :(得分:1)
而不是显式调用$stdout.flush
:
$stdout.sync = true
答案 2 :(得分:0)
为了我使用ruby 1.8.7,1.9.2和ree工作。您使用的是什么版本的ruby和操作系统?
答案 3 :(得分:0)
你希望在这里完成什么? 通常,解释器会在向您显示输出之前收集所有数据。这简直不是bash:)
答案 4 :(得分:0)
我猜你可能会遇到输出缓冲。但是你的代码示例没有显示程序如何“询问”输入,所以我猜你在ruby开始之前键入了答案。然后你的ruby程序从输入缓冲区读取输入,因为数据不是直接从键盘读取的。
您确定问题是由您向我们展示的确切的代码造成的吗?
通常使用两个不同的输出流(例如STDIN
和STDERR
)会导致终端上显示的数据错误顺序出现问题。每个流可能决定在不同时间刷新其数据。
如果你想确保在事情发生之前显示文本(如本例所示),请使用'flush'命令,正如Yossi建议的那样。