命名空间
变体
操作

srand

来自 cppreference.com
< c‎ | numeric‎ | random
在头文件 <stdlib.h> 中定义
void srand( unsigned seed );

使用 seed 值为由 rand() 使用的伪随机数生成器播种。

如果在任何调用 srand() 之前使用 rand()rand() 的行为就像用 srand(1) 播种一样。

每次用相同的 seedrand() 播种时,它必须产生相同的值序列。

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)); //use current time as seed for random generator
    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 函数 (p: 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 函数 (p: 312-313)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.10.2.2 srand 函数

[编辑] 另请参见

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