[英]Custom rand() function return the same value
供参考,我遵循了这个线程 。
我从main()
函数调用此函数,该函数返回范围为[0, N]
的随机值:
int randr(int min, int max) { int r = (rand() % (max+1-min)+min); return r; }
例如:
int main()
{
unsigned int r=128;
while(r--)
{
int a = randr(0, 63);
int b = randr(64, 127);
printf("%d %d\n", a, b);
}
return 0;
}
问题是,每次执行程序时,变量a
和b
始终包含相同的生成值,为什么(我的意思是在终端上printf总是相同的数据) ?
在rand
的手册页中:
rand()
函数返回一个伪随机整数,范围为0到RAND_MAX
(含)(即数学范围[0, RAND_MAX]
)。
srand()
函数将其参数设置为rand()
返回的新的伪随机整数序列的种子。 通过调用具有相同种子值的srand()
可重复这些序列。如果没有提供种子值,则
rand()
函数将自动以1值作为种子。
最后一句话特别重要。 使用相同的种子,您将始终获得相同的伪随机数序列。 而且由于您没有显式使用srand()
,因此种子始终为1。
试着考虑看看C ++的函数srand 。
您每次必须为随机序列添加不同的种子。
最常见的是srand((unsigned)time(NULL));
。
只要种子是相同的兰特,就会生成相同的序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.