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?
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
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.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.