rand()不会创建随机数

时间:2013-06-04 23:02:54

标签: c++ random

我有一个简单的程序,到目前为止创建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]);
    }
}

3 个答案:

答案 0 :(得分:3)

您想在srand(time(NULL));开始时拨打main

但是,除此之外,您的逻辑的其余部分似乎可能错误。特别是,它现在看起来像你可以(例如)作为社区卡交易五个ace(或者是你的循环/条件用于修复它?)

通常你想填充牌组,用std::random_shuffle随机移动,然后将牌从那里移到社区,玩家和对手的手中。

答案 1 :(得分:3)

在调用rand之前,只需使用srand一次正确的种子。通常,使用srand(time(0))

或者,C ++ 11提供了许多具有细粒度规范的更好random number generatorsrand基本上不保证它产生的数字的质量。)

答案 2 :(得分:2)

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

int main()
{
    srand(time(0));

    // STUFF
}