Ruby多行输入只允许一个输入

4

我正在开发一个小程序,希望用户可以输入可能包含多行的响应。

我找到了一个示例:

$/ = "END"
user_input = STDIN.gets
puts user_input

但这会使所有输入都需要使用END关键字,而我只需要一个输入需要用到它。

如何为仅一个输入生成多行输入?


2
用户显然需要一种告诉您何时完成的方法。例如,可能是一个逃脱键或两个连续的回车键。您可以考虑使用IO#getc进行输入。 - Cary Swoveland
最简单的表示“我完成了”的方式是使用 Ctrl-D。请参见下面的答案。 - user513951
3个回答

9

IO#gets 有一个可选参数,可以指定分隔符。以下是一个例子:

puts "Enter Response"
response = gets.chomp

puts "Enter a multi line response ending with a tab"
response = gets("\t\n").chomp

输出:

Enter Response
hello
Enter a multi line response ending with a tab
ok
how
is
this

2
不错。我不知道那个。也许用"IO#gets"替换"Gets has..."会更好。 - Cary Swoveland
谢谢Cary,已经包含了链接。 - Anthony
1
当我使用这个时,它直接覆盖了我的下一个gets。打印“多行响应:” 响应= gets(“完成”)。chomp打印“一行响应:” oneLine = gets.chomp - Milksnake12

2

这个方法接受文本,直到第一个空行:

def multi_gets(all_text='')
  until (text = gets) == "\n"
    all_text << text
  end
  return all_text.chomp # you can remove the chomp if you'd like
end

puts 'Enter your text:'
p multi_gets

输出:

Enter your text:
abc
def

"abc\ndef"

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接