基本随机数生成
函数 rand()
可用于生成 0
和 RAND_MAX
之间的伪随机整数值(包括 0
和 RAND_MAX
)。
srand(int)
用于为伪随机数生成器播种。每次将 rand()
播种到同一种子时,它必须产生相同的值序列。它应该只在播放 rand()
之前播种一次。每次希望生成一批新的伪随机数时,不应重复播种或重新播种。
标准做法是使用 time(NULL)
的结果作为种子。如果随机数生成器需要具有确定性序列,则可以在每个程序启动时为生成器设置相同的值。这通常不是发布代码所必需的,但在调试运行中非常有用,可以使错误重现。
建议始终为生成器播种,如果不播种,它的行为就好像是用 srand(1)
播种的。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i;
srand(time(NULL));
i = rand();
printf("Random value between [0, %d]: %d\n", RAND_MAX, i);
return 0;
}
可能的输出:
Random value between [0, 2147483647]: 823321433
笔记:
C 标准不保证产生的随机序列的质量。在过去,rand()
的一些实现在生成的数字的分布和随机性方面存在严重问题。不建议将 rand()
用于严重的随机数生成需求,如加密。