Rand()返回与每个函数调用相同的值

时间:2014-02-25 00:17:56

标签: c++

每当我在类文件中调用特定方法时,我都会返回一个随机值,但每次再次调用该方法时它会返回相同的值。

例如

int CommuterTrain::getRandNumber(int maximumValue)
{
    srand(unsigned(time(NULL)));

    int maximum = maximumValue;
    return rand()%maximum+1;
}

void CommuterTrain::loadRiders()
{
    int passengers = getRandNumber(350);
    currentRiders += passengers;
    if (currentRiders > maxCapacity) {
        cout << "The train has reached capacity! \nSome people were left at the station."
                 << endl;
        currentRiders = maxCapacity;
    }
    else {  
        cout<<passengers<<" pax have entered the vessel"<<endl;
    }
}

假设发电机产生的数量为215人。当我再次调用该方法时,它不会再次随机化,每次最终都会使用215。

是生成器中的问题,还是以下方法?

2 个答案:

答案 0 :(得分:1)

你继续重新种植它。使用相同的种子(假设您的计算机比1920年更新,因此可以在第二个下执行您的代码)。别这么做。

这意味着你一遍又一遍地重新生成并重新启动相同的伪随机序列。因此,每次调用rand()时,您都会在该序列中拉出相同的第一个值。

在您的计划中仅种子

例如,您可以将srand来电置于main

如果你开始执行它可能需要大约一秒钟,就像新的第二个开始一样。整数逻辑和所有这些。无论

答案 1 :(得分:0)

你的问题是,你在每次调用你的函数时播种随机引擎:

int CommuterTrain::getRandNumber(int maximumValue)
{
    srand(unsigned(time(NULL))); // <<< This line causes your problems

    int maximum = maximumValue;
    return rand()%maximum+1;
}

在调用time()函数之间,当前getRandNumber()结果不太可能发生显着变化。

您应该在功能外部之后调用srand(time(NULL))(例如,在CommuterTrain类构造函数中,或者仅在main()更好)。