使用rand()来模拟骰子.稍微丢失了

Mac*_*y18 5 c

这可能是一个愚蠢的问题,但我真的很挣扎这个概念.我正在阅读有关数组和rand()函数的教程.我有两个问题.

首先,显然是要模拟一个骰子,我们需要从1-6中随机生成一个数字.这本书暗示了这个:

int       RollOne( void ) {
    return (rand() % 6) + 1;
}
Run Code Online (Sandbox Code Playgroud)

好吧,好吧rand()可以生成0-32767之间的任何数字.然后我们找到该数字的余数除以6,然后加1.例如3245是随机生成的.我们将它除以6,给出540.8333并取其余部分.8.333(截断到8我相信)然后加1.除非我发疯,否则9,这不是1-6之间.该程序运行正常但我无法理解我们如何使用该代码从1-6获得数字!任何帮助将不胜感激.

我遇到的第二个问题并不是那么重要,而是相关的.这本书遗漏了这段代码的含义:

srand( clock() );
Run Code Online (Sandbox Code Playgroud)

所有提到的是srand()使用clock()提供的种子初始化随机数生成器.是的,现在我们可以将任何东西输入到clock()中,如果是这样,它的影响是什么?稍微解释一下srand(clock())的作用就完美了.

对不起,很长的帖子,我希望你不介意wall'o'text.任何帮助将非常感激.

谢谢,迈克

答案 谢谢大家:我意识到自己在做什么.如你们所示,%运算符不分,它只是找到最高倍数和操作数之间的差异.得到它了!我的印象是剩下的意思是小数.即如果7/2 = 3.5则剩余部分为0.5.既然我已经把它写出来了,我看到我一直都是多么愚蠢.很高兴我的A级数学很重要.....
再次感谢!

vmp*_*str 8

您的示例略有不正确:

如果你随机生成3245,将它除以6得到540.8333(因为整数数学实际得到540).其余的是3245-6*540,即5. 5 + 1是6:D


Hea*_*ohn 4

3245是随机生成的。我们将其除以 6,得到 540.8333 并取余数。

您对整数截断和余数感到困惑。当您使用整数数学将 3245 除以 6 时,余数为 5(或 0.83333 * 6 = 5)。

另一种表示方法是 540 * 6 = 3240,余数为 5。