rand()返回相同的数字

时间:2017-02-15 07:47:41

标签: c random srand

我在C中用rand()做了一个简单的例子但是函数总是返回相同的数字,尽管我使用的是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;
}

执行:

  

数字随机0 = 40数字随机1 = 40数字随机2 = 40数字   随机3 = 40数字随机4 = 40数字随机5 = 40数字随机   6 = 40数字随机7 = 40数字随机8 = 40数字随机9 = 40

2 个答案:

答案 0 :(得分:4)

这是因为你每次都重新播种它,并且由于你的程序可能运行得非常快,你的种子值(time())对于每个调用都是相同的,因为它的最小增量是1秒。

尝试将srand()移至main(),然后将其调用一次

答案 1 :(得分:1)

反复调用srand会破坏生成器的统计属性。

只需称呼一次。

(观察到的行为是由time(NULL)在循环的每次迭代中返回相同的值引起的。)