#C 语言标准库函数 srand
/*********************************************
* @brief 设置随机数种子
* @param seed 随机数种子
********************************************/
void srand(unsigned seed);
说明
为 rand 函数设置随机数种子。
标准做法将是将当前时间的时间戳(即 time(NULL)
的返回值)作为随机种子。虽然 time_t
不保证是整型,但主流实现都将其定义为整型。
注意,随机数种子设置一次即可,不要重复调用 srand
函数设置随机数种子。
如果没有手动设置随机数种子的情况下调用 srand
,则相当于调用 srand(1)
设置了随机数种子。
参数
seed
- 随机数种子
返回值
无
#示例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand((unsigned)time(NULL)); // 将当前时间戳设为随机数种子
printf("随机数范围为:[0, %d]\n", RAND_MAX);
for (int i = 0; i < 10; i+=1)
{
printf("%d) => %d\n", i+1, srand()); // 生成随机数
}
return 0;
}
说明:
通过 srand 函数将随机数种子设为当前时间的时间戳,从而保证每次运行获取的伪随机数都不同。
运行结果:
user@host:~ $ gcc main.c
user@host:~ $ ./a.out随机数范围为:[0, 2147483647] 1) => 2011777877 2) => 1283335051 3) => 1643681493 4) => 626576283 5) => 245496920 6) => 295267645 7) => 1664796837 8) => 362285364 9) => 1175574447 10) => 1575165136user@host:~ $ ./a.out随机数范围为:[0, 2147483647] 1) => 1624498619 2) => 1861794423 3) => 1733378457 4) => 1937168078 5) => 1218197945 6) => 1239660431 7) => 935940283 8) => 598401544 9) => 2141093002 10) => 1586032636user@host:~ $ ./a.out随机数范围为:[0, 2147483647] 1) => 273475450 2) => 1369492771 3) => 193362954 4) => 744150840 5) => 282193793 6) => 109107583 7) => 1688675592 8) => 395223951 9) => 637742186 10) => 1226964306
#推荐阅读
#参考标准
- C17 standard (ISO/IEC 9899:2018):
- 7.22.2.2 The srand function (p: 252-253)
- C11 standard (ISO/IEC 9899:2011):
- 7.22.2.2 The srand function (p: 346-347)
- C99 standard (ISO/IEC 9899:1999):
- 7.20.2.2 The srand function (p: 312-313)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.10.2.2 The srand function