变量在第一次执行后始终相同

Variables always the same after first execution?

本文关键字:第一次 执行 变量      更新时间:2023-10-16

我正在将一个python脚本移植到C++,它调用一个函数一千多次。我从来没有用C++编程过,所以我不确定发生了什么,也找不出更好的标题来回答这个问题。

这不是我的实际功能,但它再现了相同的错误

int maior_sequencia()
{
    int random;
    srand(time(NULL));
    int maior_sequencia = rand() % 6+1;
    printf("%i", maior_sequencia);
    return 1;
}
int main()
{
    for(int i = 1; i<=100; i++)
    {
        maior_sequencia();
    }
    return 1;
}

如果maior_sequencia((的第一个结果是3,那么它将输出3333333。。。如果我再次运行程序,第一个结果是5,它将输出555555…

为什么会发生这种情况?

int maior_sequencia()
{
    int random;
    srand(time(NULL)); 
    //^^This will reset random seed every time you call this function
    int maior_sequencia = rand() % 6+1;
    printf("%i", maior_sequencia);
    return 1;
}

由于每次调用maior_sequencia函数时都会重置随机种子,因此,它将为您提供相同的值。

尝试放置

srand(time(NULL));

而是在for循环之前的CCD_ 2内部。

问题有两个方面。首先是你对时间的使用。当你使用time((为随机数生成器播种时,time是1973年某个日期的秒数,我忘记了确切的日期,但它被称为linux时间。由于你每次都在播种,你正在重置随机数生成器,这是一个很好的做法,然而,由于你用几秒钟内返回一个数字的东西来播种,你的程序可能只需要不到一秒钟的时间就可以运行。要么按照别人的建议去做,只给随机数生成器种子一次,要么用更精细的粒度种子。。。ms可能是可以接受的。