Ruby:字符串比较问题

4

我正在学习Ruby,除了一个小的字符串比较问题之外,其他方面都很喜欢。

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

我正在使用gets()函数测试用户是否想要将他们的输入相乘或相加(我已经测试过这两个函数,它们都可以工作),之后我使用更多的输入函数和浮点数转换(也可以正常工作)来获取输入。

问题在于当我输入A时,我得到了“无效答案”的提示。输入M时也是同样的情况。

这里发生了什么?(我也尝试过.eql? (sp),但返回了bubcus)


1
一直以为是“bupkiss”,但我想官方的英语拼写应该是“meshuggah”。 - Steve B.
1
我注意到你已经提了3个问题,但是还没有接受任何答案。我不是说你应该接受我的答案,但是如果你的问题得到解决,你应该接受某个人的答案。 - Jordan Running
5个回答

6

gets 返回输入的整个字符串,包括换行符,所以当他们键入 "M" 并按下回车键时,返回的字符串是 "M\n"。为了去除尾随的换行符,请使用 String#chomp,即用 answer = gets.chomp 替换您的第一行。


好的,感谢所有建议使用chomp的人。对于那些来自其他不像这样做的语言(如C#、VB.NET、C++、Python等)的人来说,这是一道意外的难题。 - new123456
由于我无法编辑评论,我也要说一下。这也解决了我的诊断问题:在我打印输入内容后,它还会打印一个换行符。谢谢你解释原因! - new123456

1
问题在于Ruby将回车符包含在值中。
将第一行改为:
answer = gets().strip

你的脚本将会如预期般运行。

此外,你应该使用puts而不是两个print语句,因为puts会自动添加换行符。


0

在检查答案时添加一个换行符...

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

或者先对字符串进行 chomp 操作:answer = gets.chomp


0
你的答案返回时附加了一个回车符。所以输入的 "A" 永远不等于 "A",而是 "A(回车)"。
如果你将拒绝行改为 print("无效答案。[#{answer}]"),你就可以看到这一点。你也可以将比较改为 if (answer.chomp == ..)。

0

我从未使用过gets,但我认为如果你按回车键,你的变量答案可能会包含'\n',尝试调用.chomp来删除它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接