rand()返回相同的数字
我在C中用rand()做了一个简单的例子,但是函数总是返回相同的数字,尽管我使用的是srand()。
这是代码:
#include #include #include 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
这是因为你每次都重新播种它,并且由于你的程序可能运行得很快,你的种子值(time())对于每个调用都是相同的,因为它的最小增量是1秒。
尝试将srand()
移动到main()
并调用一次
反复调用srand
破坏生成器的统计属性。
称它不超过一次。
(观察到的行为是由time(NULL)
引起的,它在循环的每次迭代中返回相同的值。)