Reputation: 873
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)
Upvotes: 4
Views: 1513
Reputation: 106147
gets
returns the entire string entered, including the newline, 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
.
Upvotes: 6
Reputation: 66231
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.
Upvotes: 1
Reputation: 5201
Add a newline when you check your answer...
answer == "M\n"
answer == "A\n"
Or chomp your string first: answer = gets.chomp
Upvotes: 0
Reputation: 5048
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.
Upvotes: 0
Reputation: 57333
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 == ..)
Upvotes: 0