繁体   English   中英

自定义rand()函数返回相同的值

[英]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;
}

问题是,每次执行程序时,变量ab始终包含相同的生成值,为什么(我的意思是在终端上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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM