如何生成1到3之间的随机数? 有了这个功能,我有时会得到0(我只想要1,2或3):
ziehen=rand() % 3 + 1;
为什么我必须在主程序中添加srand(0)? 我添加了
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
到Libaries。这还不够,还是我需要更多?
答案 0 :(得分:2)
您必须从不使用模数来减少rand()
输出的周期性。原因?这是因为标准线性同余生成器的低阶位比高阶位更不随机:模数丢弃高阶位。
最好的办法是使用(3.0 * rand() / (RAND_MAX + 1.0)) + 1.0;
。通过将输出分配给整数类型,将其隐式转换为int
。
RAND_MAX
由C标准定义,其值依赖于实现
答案 1 :(得分:1)
此代码永远不会返回0. rand()始终返回介于0和RAND_MAX之间的数字。
模运算返回0到2之间的值。添加1会产生您想要的结果。 无需括号。 Modulo排名高于增加。
您不必添加srand(0),但如果这样做,您将始终获得相同的数字序列。阅读文档。