2014-01-14 40 views
3

我瞭解\ n自動在putsgets的末尾,以及如何處理這些,但是有沒有辦法保持顯示點('光標位置',如果你願意)在輸入gets後輸入一個新行後移動到新行?gets.chomp沒有移動到新行

例如

print 'Hello, my name is ' 
a = gets.chomp 
print ', what's your name?' 

最終會看起來像

你好,我的名字是耶,你叫什麼名字?

回答

7

您可以通過使用(記錄很差)的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

+0

這是唯一的Ruby 2.1?有時,我得到'IOError:面向字符的字符讀取字符緩衝IO',我不確定是否因爲我使用了Ruby 1.9.3。 –

+0

我從來沒有嘗試2.0之前的功能,但他們至少部分圍繞如果1.9.3是任何事情經過。儘管如此,我還沒有開始瞭解他們功能如何的線索。 –

+0

你知道...很多...我喜歡這:)但我知道幾個:( –

0

也許我錯過了一些東西,但'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?" 
+0

使用你的代碼,我得到了兩行代碼,第二個代碼的開頭重複了這個名字(Ruby 2.1) –

+0

我直接在TextMate中測試它,它的行爲如你所願。是的,如果我在終端中運行它,我明白你的意思。是否有任何理由,你不能首先得到用戶輸入,然後只在一行上打印? – Kal

+0

我玩過額外的'gets'參數, ,並且它似乎沒有被支持。但是'Ctrl + D'可能工作,但是 - 我沒有嘗試*那*。 –