2398

12 分钟

#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) => 1575165136
user@host:~ $ ./a.out
随机数范围为:[0, 2147483647]
1) => 1624498619
2) => 1861794423
3) => 1733378457
4) => 1937168078
5) => 1218197945
6) => 1239660431
7) => 935940283
8) => 598401544
9) => 2141093002
10) => 1586032636
user@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

创建于 2025/7/27

更新于 2025/8/1