Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Массив, добавление строк - gets


Автор: antonsav 11.6.2012, 05:46
Ребята, что делаю не так? пытаюсь добалять строки в массив с клавиатуры, однако добавляется только каждая вторая строка.
То есть при 1 enter 2 enter 3 enter 4 enter enter, массив в итоге принимает вид: 2, 4

Цитата

adt = []

while gets.chomp != ''
adt.push gets.chomp
end 

puts adt


Автор: WarHog 12.6.2012, 02:04
Ты два раза считываешь значения (два вызова gets), а заносишь в массив только второе из них (когда выполняется 3-я строчка). Нужно что-то вроде
Код

foo = []
while line = gets do
  line.chomp!
  break if line == ''
  foo << line
end

Автор: antonsav 13.6.2012, 02:37
WarHog, ок, спасибо! понял

Автор: Rikkit 13.6.2012, 11:01
Цитата(WarHog @ 12.6.2012,  02:04)
Ты два раза считываешь значения (два вызова gets), а заносишь в массив только второе из них (когда выполняется 3-я строчка). Нужно что-то вроде
Код

foo = []
while line = gets do
  line.chomp!
  break if line == ''
  foo << line
end

Можно еще короче

Код

foo = []
while (line = gets.chomp) != '' do foo << line end

Автор: WarHog 13.6.2012, 21:36
Можно и так, только так будет некорректно обрабатываться конец ввода (ctrl-D, в простейшем варианте). gets вернет nil и программа выдаст NoMethodError исключение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)