我是C的新手,我正在读一本关于它的书。我刚刚遇到rand()
函数。该书指出,使用rand()
会返回0到32767之间的随机数。它还说明您可以使用%
(模数运算符)来缩小随机数。
下面是一个示例:以下表达式在变量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个数字(根据上述说法)。
不确定您是否理解我的意思,但我们非常感谢您的帮助。
答案 0 :(得分:1)
dice = (rand() % 5) + 1;
这将生成1到5之间的随机数,正如您所分析的那样。书中的% 5
可能只是一个错字。要获得1到6,它必须是% 6
。
答案 1 :(得分:1)
首先,您必须了解modulo(%)的工作原理。如果你说10并将其除以5则得到2,余数为0,因此10%5。当mod(模数)5时你得到的余数的可能范围是0 - 4.记住可能的余数如果从0到x-1除以x,则会得到。所以在你使用骰子程序的情况下,你需要1到6范围内的数字(模具的面),因此你需要修改6并在这个数字上加1,以便进行必要的移位。 (rand() % 6) + 1