«получает» не ждет ввода пользователя - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь разработать программу для repl.it с использованием платформы Ruby.Вот что у меня получилось:

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", а затем разбивает запрос по словам-word, в свой собственный массив для анализа и извлечения соответствующих данных.

Но я не могу использовать команду gets во второй раз после первоначального запроса пользователя о многострочном вводев начале.Любая другая команда gets, которую я пытаюсь использовать, после этого пропускается, и программа завершается.

1 Ответ

0 голосов
/ 21 мая 2018

Ваш код делает что-то довольно необычное: передавая строку в метод gets, вы фактически меняете входной разделитель :

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

Считываетследующая «строка» из потока ввода-вывода;строки разделяются на sep.

Причина, по которой ваш код работает не так, как вы ожидаете, заключается в том, что во входном буфере остается завершающий символ "\n", поэтому во второй раз вызывается getsвозвращает эту строку.

Пожалуй, самый простой способ решить эту проблему - просто принять этот символ при первом вызове gets:

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

Для «сложного» многострочного вводатаким образом, было бы более распространенным передавать параметр имени файла в скрипт ruby ​​и читать этот файл, а не вставлять его в терминал.

Или вы можете использовать gets(nil) для чтения до EOF и попросите пользователя нажать CTRL+D, чтобы обозначить конец многострочного ввода.

...