【发布时间】:2014-02-02 03:32:44
【问题描述】:
我了解 puts 和 gets 末尾自动出现的 \n,以及如何处理这些问题,但有没有办法保持显示点(“光标位置”,如果你愿意的话) 在使用gets 输入输入后从移动到新行?
例如
print 'Hello, my name is '
a = gets.chomp
print ', what's your name?'
最终会看起来像
你好,我叫耶利米,你叫什么名字?
【问题讨论】:
我了解 puts 和 gets 末尾自动出现的 \n,以及如何处理这些问题,但有没有办法保持显示点(“光标位置”,如果你愿意的话) 在使用gets 输入输入后从移动到新行?
例如
print 'Hello, my name is '
a = gets.chomp
print ', what's your name?'
最终会看起来像
你好,我叫耶利米,你叫什么名字?
【问题讨论】:
您可以使用(记录非常差的)getch:
require 'io/console'
require 'io/wait'
loop do
chars = STDIN.getch
chars << STDIN.getch while STDIN.ready? # Process multi-char paste
break if ["\r", "\n", "\r\n"].include?(chars)
STDOUT.print chars
end
参考资料:
相关后续问题:
enter & IOError: byte oriented read for character buffered IO
【讨论】:
IOError: byte oriented read for character buffered IO,我不确定是不是因为我使用的是 Ruby 1.9.3。
也许我遗漏了一些东西,但“gets.chomp”工作得很好,不是吗?要执行您想要的操作,您必须转义撇号或使用双引号,并且您需要在打印的字符串中包含用户输入的内容:
print 'Hello, my name is '
a = gets.chomp
print "#{a}, what's your name?"
# => Hello, my name is Jeremiah, what's your name?
为我工作。 (编辑:在 TextMate 中工作,而不是终端)
否则,您可以这样做,但我意识到这并不是您所要求的:
puts "Enter name"
a = gets.chomp
puts "Hello, my name is #{a}, what's your name?"
【讨论】:
gets的额外参数,似乎不支持。 Ctrl+D 可能会起作用——我还没有尝试过那个。