2013-03-15 106 views
0

仅供参考,我遵循此thread自定义rand()函数返回相同的值

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

+0

任何C随机数教程将给出答案。 – chris 2013-03-15 03:55:30

+1

你需要在使用rand()之前设置你的随机种子。 – taocp 2013-03-15 03:56:30

+3

可能的重复[为什么我总是用rand()函数得到相同的随机数序列?](http://stackoverflow.com/questions/1108780/why-do-i-always-get-the-same-sequence随机数与兰特) – Blastfurnace 2013-03-15 03:59:41

回答

4

rand手册页:

rand()功能的范围内返回一个伪随机整数0至RAND_MAX 包容(即,数学范围[0, RAND_MAX])。

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

如果没有提供种子值,该rand()功能会自动的1

最后一句一个 的种子值是特别重要。使用相同的种子,您将始终获得相同的伪随机数序列。而且由于你没有明确地使用srand(),你的种子总是1.

0

只要种子是相同的兰德会产生相同的序列。

1

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

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