如何在C++中生成随机数?rand()多次编译输出相同值问题求助
解决rand()每次输出相同随机数的问题
嘿,这个问题我当初刚学C++的时候也踩过一模一样的坑!
问题原因
rand()函数是伪随机数生成器,它需要一个初始的「种子值」来生成随机数序列。默认情况下,这个种子值是固定的1,所以每次运行程序,它都会从同一个起点生成完全相同的随机数序列,结果自然也就一成不变了。
解决方案
我们需要用srand()函数设置一个动态变化的种子值,最常用的方案就是用当前系统时间当种子——毕竟时间每秒都在变,每次运行程序的种子都不一样,生成的随机数自然就不同了。
具体要做这两步:
- 引入
<ctime>头文件,用来获取当前系统时间 - 在调用
rand()之前,调用一次srand(time(nullptr))完成种子设置
修改后的代码
#include <iostream> #include <stdlib.h> #include <ctime> // 新增获取时间的头文件 using namespace std; int main() { srand(time(nullptr)); // 设置随时间变化的随机种子 int a = rand() % 11; // 生成0-10范围内的随机整数 cout << a; return 0; }
额外注意点
srand()只需要在程序启动时调用一次就行,别把它放进循环里——不然每次循环都会重置种子,反而可能生成重复的数- 如果是C++11及以后的版本,追求更高质量的随机数,可以试试
<random>库里的专用工具,但对于简单场景来说,上面的方法完全够用
内容的提问来源于stack exchange,提问作者SCMS
相关产品推荐
相关产品推荐

