Namespaces
Variants

srand

From cppreference.net
定义于头文件 <stdlib.h>
void srand ( unsigned seed ) ;

rand() 函数使用的伪随机数生成器设置种子值 seed

如果在调用 srand() 之前使用了 rand() rand() 的行为将如同通过 srand ( 1 ) 进行初始化。

每次使用相同的 seed 初始化 rand() 时,它必须生成相同的数值序列。

srand() 不保证是线程安全的。

目录

参数

seed - 种子值

返回值

(无)

注释

通常来说,伪随机数生成器只应在程序开始阶段、首次调用 rand() 之前进行一次性种子初始化。 不应重复初始化种子,也不应在每次生成新批次伪随机数时重新设置种子。

标准做法是使用对 time ( 0 ) 的调用结果作为种子值。 但需注意, time() 返回的是 time_t 类型的值,而 time_t 并不保证是整型。 不过在实际应用中,所有主流实现都将 time_t 定义为整型,这也是POSIX标准所要求的。

示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
    srand(time(NULL)); // 使用当前时间作为随机数生成器的种子
    int random_variable = rand();
    printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable);
}

可能的输出:

Random value on [0 2147483647]: 1373858591

参考文献

  • C17 标准 (ISO/IEC 9899:2018):
  • 7.22.2.2 srand 函数 (页码: 252-253)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.22.2.2 srand 函数 (p: 346-347)
  • C99标准(ISO/IEC 9899:1999):
  • 7.20.2.2 srand函数(页码:312-313)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 4.10.2.2 srand 函数

参考

生成伪随机数
(函数)
rand ( ) 可生成的最大可能值
(宏常量)
C++ 文档 关于 srand