2016-10-16 6 views
3

私はC言語を初めて使っています。私はそれについての本を読んでいます。私はちょうどrand()機能に出くわしました。この本では、rand()を使用すると0から32767までの乱数が返されると記載されています。%(モジュラス演算子)を使用して乱数を絞り込むこともできます。ここ
は一例であり、以下の式は、0から33767 % 5の任意の数に等しくなるように、私は5の残りの部分を取得できませんよ可変diceC rand()ダイスの問題

dice = (rand() % 5) + 1; 

に1から6までの乱数を置きます0〜4、ただし決してありません。

代わりに上記のステートメントの% 6にする必要はありませんか?

例えば、私はランダムに0と32767の間の数値を選択した場合、のは、それから、75を言わせては:

75 % 5 == 0 
76 % 5 == 1 
77 % 5 == 2 
78 % 5 == 3 
79 % 5 == 4 
80 % 5 == 0 
Etc. 

のでかかわらず、0と32767の間の乱数の、残りはそう、5になることはありませんサイコロの6桁の数値を得ることはできません(上記のステートメントに従って)。

私が何を意味するのか分かりませんが、あなたの助けが大いに評価されるかどうかわかりません。

+3

質問は何ですか?あなたはそれに自分で答えました。 – Cristy

+2

'rand()'は0から32767までの数値を返しません。最初にマニュアルを読む –

+0

C%は実際にはモジュロ演算子ではない剰余です。 – 2501

答えて

1

dice = (rand() % 5) + 1;

これは、あなたが分析されているとして、包括的、5まで1の間の乱数を生成します。本の中の% 5はたぶんタイプミスです。 1から6を得るには% 6である必要があります。

1

まず、モジュロ(%)の仕組みを理解する必要があります。 10と言って5で割ったとき、残りの2は0になるので、10%5. mod(modulo)5が0 - 4のときに得られる剰余の可能な範囲。可能な余り0からx-1までの範囲でxで割ったときに得られます。だからあなたの場合、ダイスプログラムでは、1から6の範囲の数字(ダイの面)が必要なので、mod 6になり、必要なシフトを与えるためにこの数字に1を加えます。 (rand() % 6) + 1

+0

ありがとうございました...これは私が思ったことです。%5はおそらく本の誤字です。私にこれを確認してくれてありがとう。 – Piet