Ruby STDIN.getc 在接收时不读取字符

标签 ruby stdin getc

似乎 Ruby IO#getc 在返回字符之前等待接收到\n。

如果您尝试运行此脚本:

STDOUT.sync = true
STDIN.sync = true
while data = STDIN.getc
  STDOUT.puts "Char arrived"
end

对于发送到标准输入的每个字符,它将返回一个“Char arrived”,但仅在发送了\n 之后。

即使我写 STDIN.sync = true,似乎所有字符都被缓冲了。

有谁知道如何让脚本在一个字符发送到 STDIN 后立即打印“Char arrived”?

最佳答案

an answer from Matz :)

更新

此外,您还可以使用名为 highline 的 gem ,因为使用上面的例子可能会与奇怪的屏幕效果相关联:

require "highline/system_extensions"
include HighLine::SystemExtensions

while k = get_character
  print k.chr
end

关于Ruby STDIN.getc 在接收时不读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142901/

相关文章:

java - eclipse 在标准 StdIn 类中自动交叉函数名称

c - 在不知道要输入的字符串大小的情况下动态分配内存

java - 在 Ruby : how to use the class 中导入 .jar 文件

ruby - 哪个更地道 : positional arguments or option hashes?

arrays - 我如何重构这个 Ruby 方法来运行得更快?

c++ - printf ("something\n") 输出 "something "(附加空间) (g++/linux/用gedit读取输出文件)

c - 修改 printf 输出

c - 为什么我的循环会创建额外的链表节点?

c - 阅读 dict 文件找到 "words"并添加到 trie 中

html - 如何在 Ruby 中获取网页的 HTML 源代码