2009-12-09 179 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會添加換行符。