tags:

views:

45

answers:

2

Alright. I want it so the following would happen, Heres a sample:

puts "what would you like to see?"
var = gets.chomp
if var == "z"
  puts "this"

elsif var == "d"
  puts "stack"

elsif var == "y"
  puts "overflow"

else
  puts "I don't understand that."

end

Currently it works fine up until I want to have the user redefine the 'var'. Currently all the loops just loop back the puts from the elsif - i want it to ask for the user input again, then print out the elsif to that. For example:
User types in y, the code would say overflow, then return to line 1. Any help would be awesome.

+1  A: 

You're using the assignment operator (=) where you mean to test equality (==), I think.

You could also use case, but here's a version with while and if

print "Gimme an answer ('q' to quit) >> "
response = gets.chomp

while response != 'q'
  if response == 'z'
    puts "this"
  elsif response == 'd'
    puts "stack"
  elsif response == 'y'
    puts "overflow"
  else
    puts "I don't understand that."
  end

  print "Gimme another answer ('q' to quit) >> "
  response = gets.chomp
end
Telemachus
Was just a typo. Thats what i'm using in my real code, sorry about that... gonna edit it.
+3  A: 

gets returns nil when there is no input, and since nil evaluates to false in a conditional, you can use gets in a loop like so

while var = gets
  var.chomp!
  if var == "z" # use == to test equality, not =
    # do stuff
  elsif var == "x"
    # do stuff
  ....
end # while

You might find this works better with a case statement:

while var = gets
  case var.chomp
  when "z"
    puts "this"
  when "d"
    puts "stack"
  when "y"
    puts "overflow"
  else
    puts "I don't understand that."
  end # case
end # while
zetetic
Zetetic, you are awesome. Thank you so much.