C ++和rand / srand行为未按预期执行

时间:2016-04-28 01:15:38

标签: random srand

我使用来自cstdlib和g ++的rand和srand作为编译器。我正在试图生成一些伪随机数,我得到了一些意想不到的偏差结果。我很好奇所以我写了一个简单的函数。预期的行为将是生成1到10之间的随机数并打印出来以筛选100x。平均值的期望值应为5.但是,当我运行此函数时,它将生成一个介于1和10之间的单个随机数,并将其打印100x&s,平均值等于生成的随机数。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

float bs(){
        float random;
        srand(time(0));
        random = rand() % 10 + 1;

        return random;
}


int main(){

        float average;
        float random;

        for (int i = 1; i < 101; ++i)
        {
                random  += bs();
                cout << random << endl;
        }

        average = random/100;
        cout << average << endl;

        return 0;
}

如果从bs = 7初始返回,它将在循环的持续时间内保持7,并且每次调用bs()。输出将自动添加到100x并且平均值将等于 gasp 7.这里发生了什么?

1 个答案:

答案 0 :(得分:0)

种子只能涂一次。移动

srand(time(0));

到循环前的主要部分。