开发者

Ruby: String Comparison Issues

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

Wha开发者_如何学JAVAt 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)


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.


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.


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 == ..)


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.


Add a newline when you check your answer...

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

Or chomp your string first: answer = gets.chomp

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜