这是我第一次用 C 尝试随机数(我想念 C#)。这是我的代码:
int i, j = 0;
for(i = 0; i <= 10; i++) {
j = rand();
printf("j = %d\n", j);
}
使用这段代码,我每次运行代码时都会得到相同的序列。但是如果我在 for
循环之前添加 srand(/*somevalue/*)
它会生成不同的随机序列。谁能解释一下为什么?
最佳答案
你必须播种它。随时间播种是个好主意:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
srand ( time(NULL) );
printf ("Random Number: %d\n", rand() %100);
return 0;
}
您会得到相同的序列,因为如果您不调用 srand()
,rand()
会自动使用值为 1 的种子。
编辑
由于评论
rand()
将返回一个介于 0 和 RAND_MAX
(在标准库中定义)之间的数字。使用 modulo运算符 (%
) 给出除法 rand()/100
的余数。这将强制随机数在 0-99 范围内。例如,要获得 0-999 范围内的随机数,我们将应用 rand() % 1000
。
关于c - 为什么我总是用 rand() 得到相同的随机数序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108780/