【问题标题】:In Ruby, how can I print my next prompt on the same line after user input?在 Ruby 中,如何在用户输入后在同一行打印下一个提示?
【发布时间】:2015-02-24 19:18:13
【问题描述】:

我正在修改一个基本的河内塔游戏,并尝试让用户输入两次,但在同一行打印两个提示(由第一个输入分隔)。我已经搜索了一段时间,也许我使用了错误的术语。我假设新行是由于获取或将其设置为变量,但我该如何摆脱它?谢谢!

print "Move FROM which tower? (1 / 2 / 3) "
answer1 = gets.chomp.to_i
print "...TO which tower? (1 / 2 / 3) "
answer2 = gets.chomp.to_i

我想要这个:

从哪个塔移动? (1 / 2 / 3) 1 ...去哪座塔? (1 / 2 / 3) 2

但我明白了:

*从哪个塔移动? (1 / 2 / 3) 1

...去哪座塔? (1 / 2 / 3) 2

(输入粗体

【问题讨论】:

标签: ruby user-input


【解决方案1】:

即使在chomp 之后你也得到一个新行的原因是因为在终端中你已经输入了显示新行的回车键。

你想要的可以这样完成:

require "io/console"
print "Move FROM which tower? (1 / 2 / 3) "
x = STDIN.getch.to_i
print x
print "...TO which tower? (1 / 2 / 3) "
y = STDIN.getch.to_i
print "#{y}\n"
print "Result: (#{x}, #{y})"

请注意,这将给出以下输出:

$ ruby tower.rb
Move FROM which tower? (1 / 2 / 3) 1...TO which tower? (1 / 2 / 3) 2
Result: (1, 2)

注意这只会从STDIN获取一个字符。

【讨论】:

    【解决方案2】:

    在 Windows 中这样做

    require "Win32API"
    
    def read_char
      Win32API.new("crtdll", "_getch", [], "L").Call
    end
    
    print "Move FROM which tower? (1 / 2 / 3) "
    print answer1 = read_char.chr
    print "...TO which tower? (1 / 2 / 3) "
    puts answer2 = read_char.chr
    
    puts answer1+answer2
    

    给予

    #Move FROM which tower? (1 / 2 / 3) 1...TO which tower? (1 / 2 / 3) 2
    #12
    

    【讨论】:

    • 如果 Leo 的答案适用于 Linux,那就更好了,因为它也适用于 windows
    【解决方案3】:

    这里有一些使用ANSI escape sequences的其他技巧

    print "From Number "
    num1 = gets.chomp.to_i
    print "\033[1A\033[14C...TO Number "
    num2 = gets.chomp.to_i
    

    输出

    [arup@Ruby]$ ruby a.rb
    From Number 1  ...TO Number 2
    [arup@Ruby]$
    
    • 将光标向上移动 N 行: \033[不适用

    • 将光标向前移动 N 列: \033[NC

    N的值必须根据需要计算。 Cursor Movement.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多