You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gcc环境下使用srand后rand()仍每次返回相同结果的问题

问题原因分析
  • 你调用srand(5)时给随机数生成器传入了固定的种子值5,伪随机数生成器的特性就是:相同的种子一定会生成完全相同的随机数序列,所以你每次运行程序输出的结果自然完全一致,这不是代码错误,是srand的正常工作逻辑。
  • 固定种子的写法一般用于可复现的测试场景,如果需要每次运行生成不同的随机序列,需要传入每次运行都会变化的种子值。
修复方案

最常用的可变种子是系统当前的时间戳,修改步骤如下:

  1. 新增引入<ctime>头文件
  2. 把srand(5)替换为srand((unsigned int)time(NULL))

修改后的完整代码如下:

#include <iostream>
#include <cstdlib>
// 新增时间相关头文件
#include <ctime>

using namespace std;

int main(void)
{
    int i, x;
    // 用系统当前时间作为随机种子
    srand((unsigned int)time(NULL));
    for(i=1;i<=10;++i)
    {
        x=rand()%5;
        cout << x << endl;
    }
    return 0;
}

注意:time(NULL)的精度是秒级,如果你的程序在1秒内多次启动,还是可能出现相同的输出。需要更高精度的种子可以使用操作系统提供的真随机源,或是C++11之后<random>库提供的std::random_device真随机设备。

内容的提问来源于stack exchange,提问作者pascal111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:27:01