rand() return 相同的数
rand() return the same number
我在 C 中用 rand() 做了一个简单的例子,但是函数总是 return 相同的数字,尽管我使用的是 srand()。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int generate(int min, int max)
{
srand(time(NULL));
return rand() % (max - min + 1) + min;
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("Number random %d = %d\n", i, generate(1, 100));
}
return 0;
}
执行:
Number random 0 = 40 Number random 1 = 40 Number random 2 = 40 Number
random 3 = 40 Number random 4 = 40 Number random 5 = 40 Number random
6 = 40 Number random 7 = 40 Number random 8 = 40 Number random 9 = 40
重复调用 srand
会破坏生成器的统计属性。
只调用一次。
(观察到的行为是由 time(NULL)
在循环的每次迭代中返回相同的值引起的。)
这是因为您每次都重新播种,并且由于您的程序可能运行得非常快,所以每次调用的种子值 (time()) 都是相同的,因为它的最小增量是 1 秒。
尝试将 srand()
移动到 main()
中并调用一次
我在 C 中用 rand() 做了一个简单的例子,但是函数总是 return 相同的数字,尽管我使用的是 srand()。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int generate(int min, int max)
{
srand(time(NULL));
return rand() % (max - min + 1) + min;
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("Number random %d = %d\n", i, generate(1, 100));
}
return 0;
}
执行:
Number random 0 = 40 Number random 1 = 40 Number random 2 = 40 Number random 3 = 40 Number random 4 = 40 Number random 5 = 40 Number random 6 = 40 Number random 7 = 40 Number random 8 = 40 Number random 9 = 40
重复调用 srand
会破坏生成器的统计属性。
只调用一次。
(观察到的行为是由 time(NULL)
在循环的每次迭代中返回相同的值引起的。)
这是因为您每次都重新播种,并且由于您的程序可能运行得非常快,所以每次调用的种子值 (time()) 都是相同的,因为它的最小增量是 1 秒。
尝试将 srand()
移动到 main()
中并调用一次