tags:

views:

58

answers:

5

Hi,

I'm currently learning Ruby, and am enjoying most everything except a small string comparason issue.

answer = gets()

if (answer == "M")  
    print("Please enter how many numbers you'd like to multiply: ")   
elsif (answer. == "A")  
    print("Please enter how many numbers you'd like to sum: ")  
else  
    print("Invalid answer.")  
    print("\n")    
    return 0  
end

What I'm doing is I'm using gets() to test whether the user wants to multiply their input or add it (I've tested both functions; they work), which I later get with some more input functions and float translations (which also work).

What happens is that I enter A and I get "Invalid answer."The same happens with M.

What is happening here? (I've also used .eql? (sp), that returns bubcus as well)

A: 

your answer is getting returned with a carriage return appended. So input "A" is never equal to "A", but "A(return)"

You can see this if you change your reject line to print("Invalid answer.[#{answer}]"). You could also change your comparison to if (answer.chomp == ..)

Steve B.
A: 

I've never used gets put I think if you hit enter your variable answer will probably contain the '\n' try calling .chomp to remove it.

tsdbrown
+5  A: 

gets returns the entire string entered, including the carriage return, so when they type "M" and press enter the string you get back is "M\n". To get rid of the trailing newline, use String#chomp, i.e replace your first line with answer = gets.chomp.

Jordan
Alright, thanks to everybody who suggested chomp.Coming from other languages that don't do things like that (C#, VB.NET, C++, Python, etc.), that was a unexpected wall.
new123456
Since I can't edit a comment I'll say this as well. That also solves my diagnostic issue: it'd also print a newline after I printed what I had entered. Thanks for saying why!
new123456
A: 

Add a newline when you check your answer...

answer == "M\n"
answer == "A\n"

Or chomp your string first: answer = gets.chomp

Kenaniah
+1  A: 

The issue is that Ruby is including the carriage return in the value.

Change your first line to:

answer = gets().strip

And your script will run as expected.

Also, you should use puts instead of two print statements as puts auto adds the newline character.

Doug Neiner