c++如何生成随机数 rand()和srand()函数的正确用法【教程】

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

c++如何生成随机数 rand()和srand()函数的正确用法【教程】-第1张图片-佛山资讯网

在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>不能少。

标签: ai c++ ios stream 标准库 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~