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

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

for input with the gets method like this…
end

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

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 T.

p “Please input your choice:”
menuinput=gets

if menuinput.chomp! ==“1”
p “1”
else
p “other”
end

2006/6/22, Paul T. [email protected]:

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 T. ã?ã??はæ?¸ãã¾ã?ã?:

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 T.

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.