rand() 不创建随机数

rand() doesn't create random numbers

本文关键字:创建 随机数 rand      更新时间:2023-10-16

我有一个简单的程序,到目前为止创建了5个社区卡(全部为整型)。我已经设法设置了这些(它们是全局变量,这是故意的),但是每次我运行程序时,它们都会创建相同的数字。代码如下:

int communityCards[5];
int playerCards[2];
int opponentCards[2];
int communityValues[5];
int playerValues[2];
int opponentValues[2];
int main(int argc, const char * argv[]) {
    for (int i = 0; i < 9; i++) {
        if (i < 5) {
            communityCards[i] = rand() % 52 - i;
            for (int a = 0; communityCards[a]!=0; a++) {
                communityCards[i]==communityCards[a]?communityCards[i]++: a = a;
            }
        }
        printf("%i ", communityCards[i]);
    }
}

在调用rand之前,只使用一次具有适当种子的srand。通常使用srand(time(0))

或者,c++ 11提供了许多更好的带有细粒度规范的随机数生成器(rand基本上不保证它生成的数字的质量)。

您希望在main的开头调用srand(time(NULL));

但是,作为题外话,看起来您的逻辑的其余部分可能是错误的。特别是,现在看起来你可以(例如)发5张a作为社区牌(或者你的循环/条件打算解决这个问题?)

通常你想要填满一副牌,用std::random_shuffle洗牌,然后将牌从那里移到社区,玩家和对手的手中。

在程序开头写srand函数将当前时间作为种子

int main()
{
    srand(time(0));
    // STUFF
}