这是我第一次使用C尝试随机数(我想念C#)。这是我的代码:

int i, j = 0;
for(i = 0; i <= 10; i++) {
    j = rand();
    printf("j = %d\n", j);
}

有了这段代码,我每次运行代码都会得到相同的顺序。但是如果我在srand(/*somevalue/*)循环之前添加for,它会生成不同的随机序列。谁能解释为什么?

最佳答案

您必须播种。随时间播种是个好主意:

srand()

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
  srand ( time(NULL) );
  printf ("Random Number: %d\n", rand() %100);
  return 0;
}

您得到相同的序列,因为如果不调用rand()srand()会自动以1的值作为种子。

编辑

由于评论
rand()将返回0到RAND_MAX(在标准库中定义)之间的数字。使用modulo运算符(%)可得出rand() / 100除法的其余部分。这将强制随机数在0-99范围内。例如,要获取0-999范围内的随机数,我们将应用rand() % 1000

关于c - 为什么我总是用rand()获得相同的随机数序列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1108780/

10-11 23:13
查看更多