如何在C++中输出两组不同的随机数?

2 c++ random function

到目前为止,这是我的代码:

#include <iostream>
#include <time.h>
#include <stdio.h>      
#include <stdlib.h>  
using namespace std;

int DealerRoll(int dealerRoll)
{
        srand (time(NULL));
    for (int dealerCount = 1; dealerCount <= 3; dealerCount++)
    {
    dealerRoll = rand()% 6+1;
    cout << dealerRoll << " ";
    }
    return dealerRoll;
}
int PlayerRoll(int playerRoll)
{

        srand (time(NULL));
    for (int playerCount = 1; playerCount <= 3; playerCount++)
    {
    playerRoll = rand()% 6+1;
    cout << playerRoll << " ";
    }
    return playerRoll;
}

int main()
{
    int dealerRoll;
    int playerRoll;

    cout << "Dealer's Roll: " << endl;
    DealerRoll(dealerRoll);
    cout << endl << "Your Roll: " << endl;
    PlayerRoll(playerRoll);
system ("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是经销商和玩家的随机(骰子)滚动总是一样的.输出将是这样的例如:

Dealer's Roll: 
1 6 3 
Your Roll: 
1 6 3  
Run Code Online (Sandbox Code Playgroud)

如何使玩家的滚动与此类经销商不同?

Dealer's Roll: 
1 6 3 
Your Roll: 
4 2 5
Run Code Online (Sandbox Code Playgroud)

小智 5

这是因为你不断重置你的种子.这需要非直观地完成,否则你每次都会返回相同的看似随机的数字.(实际上确实有特定的用例,这就是你想要做的事情)只做一次在执行的顶部包含这一行,而不是在每个连续的循环函数中.

srand (time(NULL));
Run Code Online (Sandbox Code Playgroud)

参考这个主题更深入的答案.

srand() - 为什么只调用一次?

  • @NathanielJohnson问题是`time(NULL)`只返回精确到每个*秒*的时间,所以如果你每秒多次调用`time(NULL)`你得到相同的数字.显然,调用这两个函数之间的时间可能大约是百万分之一秒,所以...... (2认同)