VDS за 300р от нашего партнера SpaceWeb
[2]
24 Июн 2012, 02:32

Принять команду пользователя из командной строки

class OrangeTree def initialize @age = 0 #нулевой @orangeCount = 0 #плодов нет @death = 10 #время смерти @start = 3 @picks = 0 puts 'Вы посадили апельсиновое дерево.' end
def treeHeight @height = @age * 0.2 'Высота дерева ' + @height.to_s + ' м' end
def CountTheOranges if @age > @start @orangeCount = 5 + @age * 2 - @picks end 'На дереве ' + @orangeCount.to_s + ' апельсинок' end
def pickAnOrange if @orangeCount != 0 @orangeCount = @orangeCount - 1 @picks = @picks + 1 puts 'Вы съели апельсинку, она няшна и вкусна!' else if @age <= @start puts 'Дерево еще слишком маленькое, чтобы давать плоды' else puts 'Плодов на дереве нет.' end end end
def OneYearPasses @age = @age + 1 @picks = 0 puts puts 'Прошел год' if @orangeCount != 0 puts 'Несобранные апельсинки упали и испортились :(' end if @age == @death puts 'Увы, срок дерева подошел к концу. Оно скукожилось и больше не будет давать вкусняшек =(' exit end end end
tree = OrangeTree.new line = gets.chomp while line != 'stop' if line == 'year' tree.OneYearPasses elsif line == 'pick' tree.pickAnOrange elsif line == 'height' puts tree.treeHeight elsif line == 'count' puts tree.CountTheOranges end end

При попытке ввести любую команду, программа уходит в бесконечный цикл

#ruby

Комментарии (4)
xmms 24.06.2012 13:52

Так правильно, цикл крутится если line != 'stop'. Рано или поздно нужно выйти из цикла. У вас какая задача то?
+3
koha 24.06.2012 13:59

Задача - смоделировать дерево. Я это сделала - вроде в классе orangeTree все нормально. Дальше по задаче нужно после класса вызывать различные методы (т.е. прописывать команды в коде), мне хочется изменить прогу так, чтобы она могла взаимодействовать с терминалом - пользователь сам вводит какие-то команды и программа на них реагирует
0
koha 24.06.2012 14:02

все, кажется разобралась, спасибо
+2
zzoll 24.06.2012 14:04

При выполнении программы, она доходит до gets.chomp и ждет ввода пользователем.

к сожалению я сейчас не могу это отладить на виртуальной машине, но я бы сделал так:

while TRUE
line = gets.chomp
if line == 'year'
tree.OneYearPasses
elsif line == 'pick'
tree.pickAnOrange
elsif line == 'height'
puts tree.treeHeight
elsif line == 'count'
puts tree.CountTheOranges
elsif line == 'stop'
puts 'выходим'
break
end
end

То есть цикл не есть память, а ждет ввода.
0

Добавить комментарий

Войдите, чтобы написать о чем-нибудь...
Вход Регистрация
Web.onRails
Здесь вы можете спросить или написать обо всём, что касается Веб-разработки.
написать о чем-нибудь...
Метки:
Лучшее
[52]
16 Окт 2011, 15:38
Вывести все элементы POST
[просмотров 14512]
[74]
31 мая 2011, 11:48
Python проверка существования переменной
[просмотров 10185]
[100]
19 Дек 2014, 16:16
User-agent для Internet Explorer 11
[просмотров 9470]
[4]
10 Окт 2018, 15:33
Как запретить просмотр сайта по IP?
[просмотров 9153]
[125]
21 Июл 2011, 14:04
Python Imaging Library (PIL)
[просмотров 7398]
[315]
11 Авг 2011, 00:21
Спецификация HTML5 от W3C
[просмотров 7368]
[315]
16 Июл 2011, 20:03
Python работа с MySQL
[просмотров 5311]

Вести с Хабра