Forum: Ruby Case loop / Program quits

02ace4696e2e69eefd1578cacd946ceb?d=identicon&s=25 Greg Hajdu (vori)
on 2013-11-07 18:07
Hello everyone!
I'm trying to make a little grocery list to practice. My intention is to
make basically an array that you can add to, remove and display items.
My problem starts when after a person adds an item to the array for
example and the options come up again, instead of going back into the
cases the program just quits.
It kinda is like a loop where it keeps going around and around.. my
program just doesn't wanna do that. :D
Could someone explain where I went wrong with my codes?

list = Array.new(0)

display_proc = Proc.new {|x| puts x}

puts "What would you like to do with your shopping list?"

def opening_options
  puts
  puts "--ADD"
  puts "--REMOVE"
  puts "--CLEAR"
  puts "--DISPLAY"
  puts "--EXIT"

  @options = gets.chomp.downcase
end

opening_options

case @options
  when "add"
    puts "What item would you like to add?"
    add = gets.chomp
    list << add unless list.include?(add)

    opening_options

  when "remove"
    puts "What item would you like to remove?"
    list.each(&display_proc)
    remove = gets.chomp
    list.delete(remove)

    opening_options

  when "clear"
    puts "Are you sure you want to delete every item from your list?"
    puts "--YES/NO"
    clear = gets.chomp.downcase
    case clear
      when "yes" || "y"
        list.delete_if {true}
        opening_options
      when "no" || "n"
        opening_options
      else "ERROR! Unknown command!"
    end

  when "display"
    list.each(&display_proc)

    opening_options

  when "exit"
    system('quit')
  else "ERROR! Unknown command!"
end
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (robert_k78)
on 2013-11-07 18:19
(Received via mailing list)
On Thu, Nov 7, 2013 at 6:07 PM, Greg Hajdu <lists@ruby-forum.com> wrote:
> list = Array.new(0)
>   puts "--DISPLAY"
>   puts "--EXIT"
>
>   @options = gets.chomp.downcase
> end

You need a loop starting here and ...

> opening_options
>
> case @options
>   when "add"
>     puts "What item would you like to add?"
>     add = gets.chomp
>     list << add unless list.include?(add)

This line should go away, similarly as all other invocations inside the
case:

>   when "clear"
>     end
>
>   when "display"
>     list.each(&display_proc)
>
>     opening_options
>
>   when "exit"
>     system('quit')

This won't work. You want to invoke "exit" instead of "system".

>   else "ERROR! Unknown command!"
> end

... ending here.

Kind regards

robert
5a837592409354297424994e8d62f722?d=identicon&s=25 Ryan Davis (Guest)
on 2013-11-07 20:15
(Received via mailing list)
>> program just doesn't wanna do that. :D
>>  puts "--ADD"
>> opening_options
>>
>>    puts "--YES/NO"
>>    clear = gets.chomp.downcase
>>    case clear
>>      when "yes" || "y"

when "yes", "y"
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.