2012-03-30 8 views
2

Tate氏の「7週間の7つの言語」でRubyの章に取り掛かりました。Rubyのセンチネルループが期待通りに機能しない(7つの言語を7週間で)

1日目のボーナスに関する質問では、「ランダム」番号を生成し、ユーザーの推測を入力から読み取って、推測値を「ランダム」番号と比較してから、ユーザーに推測を続けますbeginループ。しかし、ループはユーザーが入力した文字列の値に関係なく終了するようです。

# file : day1_bonus.rb 
# Seven Languages In Seven Weeks 
# 
# Guess a random number! 

again = "y" 

begin 
    print "Enter a number between 0 and 9: " 
    number = gets.to_i 
    randNum = rand(10) 

    if number == randNum 
    puts 'You guessed correctly!' 
    else 
    puts 'You guessed incorrectly.' 
    end 

    print "Play again? (y/n): " 
    again = gets 
    again.chomp # remove carriage return 
end while again == "y" 

出力:

Enter a number between 0 and 9: 3 
You guessed incorrectly. 
Play again? (y/n): y 
nil 
+1

フェア十分な質問を行うが、ここではRubyのhttp://stackoverflow.com/q/3955688/38765 –

+0

@AndrewGrimmでデバッグを行う方法についていくつかのヒントがあります: :) –

+0

@AndrewGrimm:ありがとう、私はREPLでどのようにデバッグするかと思っていました。私はこれを見ていきます。 – dtg

答えて

4

chompの2つのバージョンがあります。通常のchompとバンchomp!です。違いは:regularは修正された文字列を返す(そしてソースのみを残す)一方、bangのバージョンは元の文字列をインプレースで変更する。

あなたのコードでは、キャリッジリターンをシャープにして、この作業を捨てます。どちらのこの

again = again.chomp 

またはこの

again.chomp! 
+0

ありがとうございます!また、私は 'to_i'メソッドを使ってnumberの値を変換する必要があることに気付きました。それ以外の場合は動作しません。私は上記のそれを修正します。 – dtg

+1

@Dylan:役に立つ回答を受け入れることを忘れないでください:) –

+0

ごめんなさい。完了しました。 – dtg

関連する問題