我了解\ n自动在puts
和gets
的末尾,以及如何处理这些,但是有没有办法保持显示点('光标位置',如果你愿意)在输入gets
后输入一个新行后移动到新行?gets.chomp没有移动到新行
例如
print 'Hello, my name is '
a = gets.chomp
print ', what's your name?'
最终会看起来像
你好,我的名字是耶,你叫什么名字?
我了解\ n自动在puts
和gets
的末尾,以及如何处理这些,但是有没有办法保持显示点('光标位置',如果你愿意)在输入gets
后输入一个新行后移动到新行?gets.chomp没有移动到新行
例如
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
也许我错过了一些东西,但'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?"
使用你的代码,我得到了两行代码,第二个代码的开头重复了这个名字(Ruby 2.1) –
我直接在TextMate中测试它,它的行为如你所愿。是的,如果我在终端中运行它,我明白你的意思。是否有任何理由,你不能首先得到用户输入,然后只在一行上打印? – Kal
我玩过额外的'gets'参数, ,并且它似乎没有被支持。但是'Ctrl + D'可能工作,但是 - 我没有尝试*那*。 –
这是唯一的Ruby 2.1?有时,我得到'IOError:面向字符的字符读取字符缓冲IO',我不确定是否因为我使用了Ruby 1.9.3。 –
我从来没有尝试2.0之前的功能,但他们至少部分围绕如果1.9.3是任何事情经过。尽管如此,我还没有开始了解他们功能如何的线索。 –
你知道...很多...我喜欢这:)但我知道几个:( –