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

C++中rand()函数每次运行返回相同值的问题求助

解决rand()每次运行返回相同结果的问题

问题原因

rand()默认用固定值1作为随机数种子初始化,导致每次程序启动都会生成完全相同的随机数序列,所以你每次运行得到的结果都是固定值。

修复步骤

1. 初始化随机数种子

在程序入口(比如main函数开头)调用srand(time(nullptr)),用当前系统时间作为随机数种子,这样每次程序启动时种子都不同,生成的随机数序列也就不一样了。

  • 需要额外包含<ctime>头文件,因为要用到time()函数。

2. 修正随机数范围公式

你期望生成-450到-625之间的数(实际是-625 ≤ y ≤ -450),当前代码-(rand() % 175) - 450只能生成-624到-450的数,漏掉了-625。把175改成176即可覆盖完整范围:

y(-(rand() % 176) - 450)

修改后的示例代码

针对你的Random类最小可复现示例:

#include <iostream>
#include <cmath>
#include <ctime> // 新增头文件

class Random
{
    int rndm;

public:
    Random();

};

Random::Random() :
    rndm(-(rand() % 176) - 450) // 修正范围,包含-625
{
    std::cout << rndm << std::endl;
}


int main() {
    srand(time(nullptr)); // 初始化随机数种子
    Random random;
}

针对Pipes类:

确保在main函数开头执行srand(time(nullptr)),同时修正构造函数中的y值生成代码:

Pipes::Pipes() :
    y(-(rand() % 176) - 450),
    x(200)
{
    std::cout << y;
}

额外建议(可选)

如果你的编译器支持C++11及以上版本,更推荐使用<random>库的现代随机数工具(比如std::mt19937随机数引擎+std::uniform_int_distribution分布),它生成的随机数均匀性更好,也避免了rand()的一些缺陷。比如:

#include <random>

// 在类外或全局定义(避免每次构造都重新初始化引擎)
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dist(-625, -450);

// 构造函数中使用
Pipes::Pipes() :
    y(dist(gen)),
    x(200)
{
    std::cout << y;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:43:34