c - 为什么我总是用 rand() 得到相同的随机数序列?

标签 c random

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

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

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

最佳答案

你必须播种它。与时间一起播种是个好主意:

srand()

#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/22888766/

相关文章:

c++ - 如何使用模板化 C++ 结构定义 C-forward 声明的不透明结构

复制到 C 中的嵌套结构

r - 如何获取目标中随机生成器当前状态的种子并将其放入 set.seed() 函数中

c - 生成均匀分布的随机数

java-如何生成6位随机十六进制值

c - c 中的 volatile

C - 从文件读取时光标 'interpret' 如何出现空格?

php - for循环中随机序列的html表

c - 数组元素的随机交换 - 检测到堆栈粉碎

java - 在java中获取特定范围内的随机数