Newbie Questions

Hi,
I am new to Ruby and have a newbie Ruby question that i couldn't find
the answer to in the FAQ.
If this is the wrong forum to post newbie questions please accept my
apologies and direct me to a more suitable forum where i can ask newbie
Ruby questions. Thanks.

First i display a console based menu with puts statements and then wait
for input with the gets method like this..

menuChoiceString = gets

Then i have the following code to act based on what menu option was
chosen.

if menuChoiceString == "1" then
puts "You pressed 1"
else
  puts "You pressed 2"
end

When i use this and enter 1 it goes to the second option.
It looks fairly simple syntax so i'm not sure why the if statement is
failing.
Can anyone help me understand why this would fail?

thanks

Paul

···

--
Posted via http://www.ruby-forum.com/.

irb(main):016:0> x = gets
1
=> "1\n"
irb(main):017:0> x
=> "1\n"
irb(main):018:0> x.strip
=> "1"
irb(main):019:0>

-- Elliot Temple

···

On Jun 22, 2006, at 2:30 AM, Paul Teale wrote:

Hi,
I am new to Ruby and have a newbie Ruby question that i couldn't find
the answer to in the FAQ.
If this is the wrong forum to post newbie questions please accept my
apologies and direct me to a more suitable forum where i can ask newbie
Ruby questions. Thanks.

First i display a console based menu with puts statements and then wait
for input with the gets method like this..

menuChoiceString = gets

Then i have the following code to act based on what menu option was
chosen.

if menuChoiceString == "1" then
puts "You pressed 1"
else
  puts "You pressed 2"
end

When i use this and enter 1 it goes to the second option.

gets will return a string with the carriage return included.... that is
menuChoiceString will be equal to "1\n" instead of simply "1" and that is why
the comparison fails.

instead do this

if menuChoiceString.chop == "1" then

else

end

Horacio

木曜日 22 6月 2006 18:30、Paul Teale さんは書きました:

···

Hi,
I am new to Ruby and have a newbie Ruby question that i couldn't find
the answer to in the FAQ.
If this is the wrong forum to post newbie questions please accept my
apologies and direct me to a more suitable forum where i can ask newbie
Ruby questions. Thanks.

First i display a console based menu with puts statements and then wait
for input with the gets method like this..

menuChoiceString = gets

Then i have the following code to act based on what menu option was
chosen.

if menuChoiceString == "1" then
puts "You pressed 1"
else
  puts "You pressed 2"
end

When i use this and enter 1 it goes to the second option.
It looks fairly simple syntax so i'm not sure why the if statement is
failing.
Can anyone help me understand why this would fail?

thanks

Paul

p "Please input your choice:"
menuinput=gets

if menuinput.chomp! =="1"
    p "1"
else
    p "other"
end

···

2006/6/22, Paul Teale <pteale@gmail.com>:

Hi,
I am new to Ruby and have a newbie Ruby question that i couldn't find
the answer to in the FAQ.
If this is the wrong forum to post newbie questions please accept my
apologies and direct me to a more suitable forum where i can ask newbie
Ruby questions. Thanks.

First i display a console based menu with puts statements and then wait
for input with the gets method like this..

menuChoiceString = gets

Then i have the following code to act based on what menu option was
chosen.

if menuChoiceString == "1" then
puts "You pressed 1"
else
puts "You pressed 2"
end

When i use this and enter 1 it goes to the second option.
It looks fairly simple syntax so i'm not sure why the if statement is
failing.
Can anyone help me understand why this would fail?

thanks

Paul

--
Posted via http://www.ruby-forum.com/\.

--
Huazhi Gong (Hank)

<snip>

you did well to look at the FAQ but I suppose that the solution is not
there.
You did even better to post the question here and got a correct answer,
though maybe a little bit cryptic for a newcomer. Especially if you do not
know irb

Because

irb(main):016:0> x = gets

1
=> "1\n"
irb(main):017:0> x
=> "1\n"

"1\n" == "1"
   => false
and menuChoiceString contains "1\n" not "1"

BTW you might like this idiom

case menuChoiceString.chomp
    when "1"
             do something clever
    when "2"
           do something smart
   else
         do something fancy
end

irb(main):018:0> x.strip

=> "1"
irb(main):019:0

#strip is a good alternative to chomp , because it deletes all heading and
trailing whitespace.
If on the other hand heading and trailing whitespace is meaningful in the
input be careful to
use #chomp

-- Elliot Temple

Curiosity Blog – Elliot Temple

If there are more question on this topic feel free to ask off list too.

Hopefully I was clear enough (time is a constraint in my job :frowning: )

Cheers
Robert

Thanks for all your replies
Makes sense now that i've seen what is happening behind the scenes.
I come from a Java background but didn't think to test if it was adding
carriage returns to the end of the string.

···

--
Posted via http://www.ruby-forum.com/.