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/1108780/

相关文章:

c - 还有其他方法可以处理许多 'malloc' 故障吗?

c - 使用外部控制格式字符串的漏洞

mysql - 生成不在 mysql 表中的值

java - 从文本文件中选择一个随机单词

mysql - mysql中的随机字符串

php - 如何在 PHP 中随机填充单个锦标赛淘汰而不重复?

c - 遍历 char 中的字符串**

c - 这段代码有什么Bug?

c - 在单链表的开头插入节点

algorithm - 整数支付函数(插入 "expected"值,输出为 "fun"最大化的分布)