2009-12-09 141 views
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()函数来测试用户是否要增加他们的输入或添加它(我测试过这两种功能;他们的工作),这是我后来用得到一些更多的输入功能和浮点翻译(也可以)。

会发生什么事是我进入一个和我得到“无效答案。”同样的情况与M.

发生了什么事吗? (我也使用过.eql?(sp),它也会返回广告)

+1

一直认为这是“bupkiss”,但我想官方英文拼写将是meshuggah。 – 2009-12-09 21:16:57

+1

我注意到你已经提出了3个问题,但没有接受任何答案。我不是说你应该接受我的,但如果你的问题解决了,你应该接受别人的。 – 2009-12-09 21:29:47

回答

6

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

+0

好的,谢谢大家谁建议chomp。 来自其他语言不做这样的事情(C#,VB.NET,C++,Python等),这是一个意外的墙。 – new123456 2009-12-09 21:26:18

+0

由于我无法编辑评论,我也会这样说。这也解决了我的诊断问题:打印完我输入的内容后,它也会打印换行符。谢谢你说为什么! – new123456 2009-12-09 21:41:14

0

你的答案正在返回,附有回车符。因此,输入“A”永远不等于“A”,但“A(返回)”

如果您更改要打印的拒绝行(“无效答案[#{answer}]”),您可以看到此内容。你也可以改变你的比较,如果(answer.chomp == ..)

0

我从来没有使用得到把我想如果你打你输入你的可变回答可能会包含'\n'尝试调用.chomp将其删除。

0

添加,当你检查你的答案换行符...

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

或者第一的Chomp您的字符串:answer = gets.chomp

1

的问题是,红宝石,包括价值回车。

更改您的第一行:

answer = gets().strip 

而且你的脚本将运行预期。

另外,您应该使用puts而不是两个print语句,因为puts auto会添加换行符。