Ruby控制台:如何在用户输入时保持“获取”添加新行

时间:2013-02-03 11:01:16

标签: ruby

为什么gets总是在用户输入框数时添加新行?

我希望下一个print语句与输入显示在同一行。

    print "Enter the number of boxes: "
    boxes = gets.chomp
    print "Enter number of columns to print the boxes in: "
    columns = gets.chomp

我希望输出看起来像这样:

Enter the number of boxes: 47 Enter number of columns to print the boxes in: 4

在收到第二个输入之前,我不想开始换行。

2 个答案:

答案 0 :(得分:1)

您需要使用IO /控制台并一次构建输入字符:

require 'io/console'

def cgets(stream=$stdin)
  $stdin.echo = false
  s = ""
  while true do
    c = stream.getc
    return s if c == "\n"
    s << c
  end
end

问题在于回应输入;当不是换行时,让角色出来有点问题(至少在本地,而不是在我的常规机器上)。此外,由于您手动获取字符,因此它会删除正常的readline功能,因此行为将依赖于系统,例如,Unixy系统可能会丢失其退格等。

那说,哎呀;控制台上的IMO这是一个意想不到的UI模式,并且将输入保持在两行上更为明显,而且更常见。

答案 1 :(得分:0)

在Windows中你可以这样做,否则你需要一个类似于你的操作系统的read_char方法

def read_char #only on windows
  require "Win32API"
  Win32API.new("crtdll", "_getch", [], "L").Call
end

def get_number
  number, inp = "", 0
  while inp != 13
    inp = read_char
    if "0123456789"[inp.chr]
      number += inp.chr
      print inp.chr  
    end
  end
  number
end

print "Enter the number of boxes: "
boxes = get_number
print " Enter number of columns to print the boxes in: "
columns = get_number
puts ""

puts "boxes: #{boxes}"
puts "columns: #{columns}"

# gives
# Enter the number of boxes: 5 Enter number of columns to print the boxes in: 6
# boxes: 5
# columns: 6