为什么该程序输出4次相同的结果?

时间:2019-05-06 03:37:23

标签: c++ random random-seed

我希望该程序生成4个随机数组成的4个不同序列。该程序当前为每个系列输出相同的数字。知道发生了什么吗?我认为它与种子有关,但我不知道到底是什么。

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

using namespace std;
int main()
{
    int lotArr[6];
    int j = 0;
    int k = 0;
    int m = 0;
    int n = 0;
    int i = 0;
    bool crit = false;

    //interates through 4 sequences
    for(int i = 0; i < 4; i++ )
    {
        srand(time(NULL));
        //generates each number in current sequence
        for(m = 0; m < 4; m++)
        {
            lotArr[m] = rand() % 30 + 1;
        }

        //output
        for(n = 0; n < 4; n++)
        {
            cout << lotArr[n] << " ";
        }
        cout << endl;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为time(NULL)以秒为单位返回UNIX时间戳。现在,外部for循环中的每个循环执行的时间都少于一秒。因此,srand(time(NULL))本质上将种子设置为与每个循环相同。我建议采取srand(time(NULL));跳出循环,您会没事的。像这样:

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

using namespace std;
int main()
{
    int lotArr[6];
    int j = 0;
    int k = 0;
    int m = 0;
    int n = 0;
    int i = 0;
    bool crit = false;

    srand(time(NULL));

    //interates through 4 sequences
    for(int i = 0; i < 4; i++ )
    {
        //generates each number in current sequence
        for(m = 0; m < 4; m++)
        {
            lotArr[m] = rand() % 30 + 1;
        }

        //output
        for(n = 0; n < 4; n++)
        {
            cout << lotArr[n] << " ";
        }
        cout << endl;
    }
    return 0;
}