c++ 为什么for循环的输出每次都是完全相同的结果?[副本]

qacovj5a  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(145)

此问题已在此处有答案

srand() — why call it only once?(7个回答)
4年前关闭。
我想这个程序产生4个不同的系列4随机数。程序当前为每个系列输出相同的数字。知道发生什么事了吗我想这和种子有关,但我不知 prop 体是什么。

#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;
}
zz2j4svz

zz2j4svz1#

这是因为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;
}

相关问题