2

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

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

    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

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

4

2 回答 2

1

您需要使用 IO/console 并一次建立输入一个字符:

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 模式,将输入保持在两行更明显,也更常见。

于 2013-02-03T12:58:30.363 回答
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
于 2013-02-03T12:52:55.243 回答