2017-02-15 79 views
2

我正在用rand()函数在C中做一个简单的例子,但函数总是返回相同的数字,尽管我使用的是srand()。rand()返回相同数

这是代码:

#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

你不应该强制每次使用新的种子。你应该在应用程序启动时使用''srand'',而不是每次都使用。顺便说一句,你应该考虑使用''''而不是老派的''rand''。 –

+1

尝试初始化您的主要功能开始的一次随机数 – flotto

+0

谢谢,它的工作原理! –

回答

4

这是因为你每一次补种它,并为您的程序可能运行速度非常快,你的种子值(time())对于每次调用都是相同的,因为它的最小增量是1秒。

尝试移动srand()main()代替,并称之为一次

1

反复调用srand将遗漏发生器的统计属性。

称它不超过一次。

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