'变'不等待用户输入

时间:2018-05-21 09:27:37

标签: ruby input

我尝试使用Ruby平台在repl.it上开发一个程序。这就是我所拥有的:

puts "Copy the entire request page and paste it into this console, then 
hit ENTER."
request_info = gets("Edit Confirmation").chomp.gsub!(/\s+/m, ' 
').strip.split(" ")

puts "What is your name?"
your_name = gets.chomp
puts "Thanks, #{your_name}!"

我获得它的方式,用户粘贴多行请求,以"Edit Confirmation"结束,然后将请求逐字拆分为我自己的数组解析并提取相关数据。

但是我在最初初次询问用户输入多行输入后,似乎无法再次使用gets命令。我跳过之后尝试使用的任何其他gets命令,程序结束。

1 个答案:

答案 0 :(得分:4)

您的代码正在做一些非常不寻常的事情:通过将字符串传递给gets方法,您实际上是changing the input separator

gets(sep, limit [, getline_args]) → string or nil
  

从I / O流中读取下一个“行”;行由sep分隔。

你的代码没有按预期工作的原因是因为在输入缓冲区中留下了尾随的"\n"字符 - 所以第二次调用gets会立即返回此字符串。

解决这个问题最简单的方法就是在第一次gets电话中吸收这个字符:

request_info = gets("Edit Confirmation\n").chomp.gsub!(/\s+/m, ' ').strip.split(" ")

对于像这样的“复杂”多行输入,将文件名参数传递给ruby脚本更常见,并读取此文件而不是将其粘贴到终端中。

或者,您可以使用gets(nil)阅读EOF字符,并要求用户按CTRL+D表示多行输入结束。