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

时间:2013-03-15 03:54:08

标签: c++ c random

作为参考,我遵循了thread

我从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始终是终端上的相同数据)

4 个答案:

答案 0 :(得分:4)

来自rand的手册页:

  

rand()函数返回0到RAND_MAX范围内的伪随机整数   包容性(即数学范围[0, RAND_MAX])。

     

srand()函数将其参数设置为新序列的种子   rand()返回的伪随机整数。这些序列是可重复的   使用相同的种子值调用srand()

     

如果未提供种子值,则rand()功能会自动播种   值为1。

最后一句话特别相关。使用相同的种子,您将始终获得相同的伪随机数序列。由于您未明确使用srand(),因此您的种子始终为1。

答案 1 :(得分:2)

试着看看C ++的srand

答案 2 :(得分:1)

你必须每次都用不同的东西播种随机序列。

最常见的是srand((unsigned)time(NULL));

答案 3 :(得分:0)

只要种子是相同的rand就会产生相同的序列。