为什么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
在收到第二个输入之前,我不想开始换行。
答案 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