为什么这个数字不是随机的?

jon*_*nes 5 c random

对于以下代码:

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

int main()
{
    int x;
    x = rand()%100;
    printf("The Random Number is: %i", x);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎总是将随机数打印为83.这是为什么?

Dav*_*nan 6

大多数随机数生成器都是可重复的.您需要在使用之前为生成器播种,通常使用系统时间.

#include <time.h>
srand(time(NULL));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,从时间初始化PRNG并不总是正确的:这为您提供了可预测的种子.特别是,密码学需要不可预测的随机数,但C库无论如何都不能提供. (3认同)

Pet*_* K. 6

强制性XKCD参考:

在此输入图像描述

正如人们所说,你需要正确地为随机数生成器播种.

麻烦的是,它仍然只生成随机数.大多数"真正的"随机数发生器需要访问一些本质上是随机的物理现象(例如,时钟偏差或温度波动).

否则,XKCD参考并不是太远了.迪尔伯特也不是.

在此输入图像描述