【发布时间】:2017-02-25 15:05:01
【问题描述】:
我是 C 的新手,我正在读一本关于它的书。我刚刚遇到了rand() 函数。该书指出,使用rand() 返回一个从 0 到 32767 的随机数。它还指出,您可以使用%(模运算符)来缩小随机数的范围。
下面是一个例子:下面的表达式将一个从 1 到 6 的随机数放入变量dice
dice = (rand() % 5) + 1;
我无法得到 5 的余数,因为从 0 到 33767 % 5 的任何数字都等于 0 到 4,但绝不是 5。
上述语句中不应该是% 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 的骰子数(根据上面的说法)。
不确定您是否会理解我的意思,但非常感谢您的帮助。
【问题讨论】:
-
问题是什么?你自己回答了。
-
rand()不会返回 0 到 32767 之间的数字。请先阅读手册 -
在 C 中 % 实际上是余数而不是模运算符。
-
你是对的。这是作者的一个简单错误。