'gets' 不等待用户输入

问题描述 投票:0回答:2

我正在尝试使用其 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
命令都会被跳过,并且程序结束。

ruby input
2个回答
4
投票

您的代码正在做一些非常不寻常的事情:通过将字符串传递给

gets
方法,您实际上是在 更改输入分隔符:

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
表示多行输入结束。


0
投票

嗯mmmmmmmmmmmmmmmmmmmmmmmmmm哥们....

© www.soinside.com 2019 - 2024. All rights reserved.