2

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 番目の入力が受信されるまで、新しい行を開始したくありません。

4

2 に答える 2

1

IO/console を使用して、入力を一度に 1 文字ずつ作成する必要があります。

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 パターンであり、入力を 2 行に維持することはより明白であり、より一般的です。

于 2013-02-03T12:58:30.363 に答える
0

Windowsでは、このように行うことができます。それ以外の場合は、OSで機能する同様の 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 に答える