生成一个随机数
利用time.h函数生成一个随机数
生成一个”随机数”:
1 | |
会发现这个随机数有个蛋用!!!
问题根源
rand() 函数本身是伪随机数生成器,它的输出是基于一个“种子(seed)”的固定序列:
- 默认情况下, rand() 的种子是固定值(通常是 1 ),所以每次运行程序,都会生成相同的随机数序列。
解决方法
需要通过 srand() 函数设置随机种子,通常用“当前时间”作为种子(因为时间是持续变化的),步骤如下:
- 包含头文件
<stdlib.h>和<time.h>(获取当前时间的函数); - 在调用 rand() 之前,用 time(NULL) 作为参数调用
srand(),设置动态种子。
修正后的代码
1 | |
- unsigned int 的基本含义
- unsigned 表示“无符号”,即该类型的变量只能存储非负整数(取值范围是 0 到 2^位数 - 1 ,例如 unsigned int 通常占4字节,范围是 0 ~ 4294967295 );
- 与之相对的,是普通的 int (有符号整型),可以存储正、负整数和0。
- 这里用 unsigned int 的原因
代码中 srand((unsigned int)time(NULL)) 是将 time(NULL) 的返回值( time_t 类型,通常是有符号整数)强制转换为 srand() 要求的unsigned int 类型
- time(NULL) 返回当前系统时间的“时间戳”(从1970年1月1日至今的秒数),是一个整数
- 强制转换为 unsigned int 是为了匹配
srand()的参数类型,避免类型不匹配的警告/错误。
简单说: unsigned int 是“无符号的整数类型”,这里用来适配 srand() 的参数要求。
补充说明
- rand() 生成的是0到 RAND_MAX (通常是 32767 )之间的整数;
- 若需要指定范围的随机数(比如 [a, b] ),可以用公式: rand() % (b - a + 1) + a 。
生成一个范围在【0,100】的随机数:
1 | |
生成一个随机数
http://example.com/2025/11/05/生成一个随机数/