0

作为参考,我关注了这个线程

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包含相同的生成值,为什么(我的意思是它在终端上总是打印相同的数据)

4

4 回答 4

4

从手册页rand

rand()函数返回一个伪随机整数,范围从 0 到RAND_MAX 包括(即数学范围[0, RAND_MAX])。

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

如果未提供种子值,则该rand()函数将自动以值 1 为种子。

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

于 2013-03-15T03:59:08.867 回答
2

尝试看一下 C++ 的srand

于 2013-03-15T03:55:58.353 回答
1

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

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

于 2013-03-15T04:00:34.407 回答
0

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

于 2013-03-15T03:58:40.437 回答