必须调用srand(),因为rand()是伪随机数生成器,未初始化时默认以srand(1)启动,导致每次运行序列相同;正确做法是在main开头用time(nullptr)只调用一次。

在C++中用rand()生成随机数,关键不是调用它,而是先用srand()正确“播种”。不调用srand()或重复调用,会导致每次运行程序得到完全相同的随机数序列。
为什么必须调用 srand()?
rand()其实是一个伪随机数生成器,它内部维护一个状态,每次调用都基于上一次的结果计算下一个数。如果没有初始化这个状态(即没调用srand()),标准规定它默认以srand(1)启动——也就是每次都从同一个起点开始,结果自然一模一样。
常见错误写法:
- 忘记调用
srand()→ 每次运行输出相同数字 - 在循环里反复调用
srand(time(nullptr))→ 因为time()精度是秒,短时间内多次调用会设成同一个种子,导致重复随机数
正确初始化:只在程序开头调用一次
标准做法是在main()函数最开始,用当前时间作为种子:
立即学习“C++免费学习笔记(深入)”;
#include <cstdlib>
#include <iostream>
#include <ctime>
<p>int main() {
srand(static_cast<unsigned int>(time(nullptr))); // ✅ 只调用一次</p><pre class="brush:php;toolbar:false;">std::cout << rand() << '\n'; // 随机整数(0 到 RAND_MAX)
std::cout << rand() << '\n';
return 0;登录后复制
}
注意:time(nullptr)返回time_t类型,需转为unsigned int避免编译警告;头文件<ctime></ctime>不能少。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~