Начинающий вопрос - почему этот цикл не работает? - PullRequest
0 голосов
/ 23 июня 2019

Я предполагал, что следующий код объединит все разные строки ввода пользователя в одну строку.Результаты разные.Какая логика стоит за этим?

Я надеялся объединить разные пользовательские входы в один.В идеале, учитывая следующие строки ввода:

один два три четыре

Я бы закончил строкой "one \ ntwo \ nthree \ nfour"

Этокод, который я думал, будет работать:

input = ""

while gets != nil
    secondinput= gets
    input << secondinput
end

После выполнения вышеуказанного кода, ввод заканчивается как "two \ nfour", а не "one \ ntwo \ nthree \ nfour"

Что такоелогика за этим?

Спасибо большое!

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Вы звоните gets в двух местах. Один раз, когда вы проверяете условие для while, и один раз, когда вы делаете secondinput= gets. Таким образом, в строке с while вы в основном читаете строки one и three и выбрасываете значение.

Наименьшее изменение, которое я могу сделать, чтобы ваш код работал, -

input = ""

secondinput = gets
while secondinput != nil 
    input << secondinput
    secondinput = gets
end

Таким образом, вы вызываете gets только один раз за итерацию цикла.

0 голосов
/ 23 июня 2019

gets прочитает и вернет строку ввода

gets, используемую в условии while, прочитает строку, проверит ее по nil и продолжит выполнение.
Таким образом, вы просто игнорируете всевторая (первая, третья) строка вашего ввода.

Вместо этого сохраните ввод в переменную и сделайте ли вы логику со значением, сохраненным в этой переменной

input = ""

line = gets
while line != nil
  input << line
  line = gets
end

Как правильно указал @Cary Swoveland, gets никогда не вернет nil, и вы получите бесконечный цикл.

gets возвращает заданное значение с включенной «новой строкой», вы можете избавиться от новой строки (gets.chomp) и сделать ваш код проще (возможно, более читабельным)

input = ""

line = gets.chomp
until line.empty?
  input << line
  line = gets.chomp
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...