Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不是真正随机的_C++_Random - Fatal编程技术网

C++ 不是真正随机的

C++ 不是真正随机的,c++,random,C++,Random,出于某种原因,我将在下面发布的代码并不是完全随机的。。。我使用了srand(),试图使其随机。。我不知道为什么它表现得很奇怪 #include<vector> #include "../Header Files/SinglePlayer.h" SinglePlayer::SinglePlayer() { } int myRand(int low, int high) { srand(time(NULL)); return rand() % (high - low

出于某种原因,我将在下面发布的代码并不是完全随机的。。。我使用了
srand()
,试图使其随机。。我不知道为什么它表现得很奇怪

#include<vector>
#include "../Header Files/SinglePlayer.h"

SinglePlayer::SinglePlayer()
{

}

int myRand(int low, int high) 
{
   srand(time(NULL));
   return rand() % (high - low + 1) + low;
}

void SinglePlayer::startGame()
{
    cout << "Starting Single Player........." << endl;
    cout << "Starting out with two cards...." << endl;
    int randomCardStarterOnePlayer = myRand(0,10);
    int randomCardStarterTwoPlayer = myRand(0,10);
    int randomCardStarterOneAI = myRand(0,10);
    int randomCardStarterTwoAI = myRand(0,10);
    this -> calculateRandomStarter(randomCardStarterOnePlayer,
                                   randomCardStarterTwoPlayer,
                                   randomCardStarterOneAI,
                                   randomCardStarterTwoAI);
    cout << "You Start out with " << amountPlayer << endl;
    cout << "Computer Starts out with " << amountAI << endl;
}

void SinglePlayer::calculateRandomStarter(int randomOnePlayer, int randomTwoPlayer, int randomOneAI, int randomTwoAI)
{
    amountPlayer = amountPlayer + randomOnePlayer + randomTwoPlayer;
    playerCards.push_back(randomOnePlayer);
    playerCards.push_back(randomTwoPlayer);

    amountAI = amountAI + randomOneAI + randomTwoAI;
    AICards.push_back(randomOneAI);
    AICards.push_back(randomTwoAI);
}

SinglePlayer::~SinglePlayer()
{
}
#包括
#包括“./头文件/SinglePlayer.h”
SinglePlayer::SinglePlayer()
{
}
整数米兰德(整数低,整数高)
{
srand(时间(空));
返回rand()%(高-低+1)+低;
}
void SinglePlayer::startGame()
{
cout
time(NULL)
以秒为单位返回时间,并且由于每次生成新数字时都设置了新种子,因此(在大多数情况下)每次都可能设置与种子相同的数字。 移动:

开始main或只调用一次的某个地方。

time(NULL)
以秒为单位返回时间,并且由于您每次生成新数字时都设置了新种子,因此您可能(在大多数情况下)每次都将相同的数字设置为种子。 移动:

开始main或只调用一次的某个地方。

在您的代码中,它听起来像是
time(NULL)
返回一个常量,而不像您预期的那样调用
std::time(NULL)
。如果它这样做了,您将从
rand()
中正确生成一个随机数

尝试打印
时间(NULL)
的输出,并检查您是否实际获得了自历元以来的秒数。如果没有,请确保包括
,并调用完全限定的
srand(std::time(NULL))

听起来像
时间(NULL)
在您的代码中,返回一个常量,它不会像您预期的那样调用
std::time(NULL)
。如果它这样做,您将从
rand()
中正确生成一个随机数



尝试打印
时间(NULL)
的输出,并检查您是否实际获得了自历元以来的弹性秒数。如果没有,请确保包含
,并调用完全限定的
srand(std::time(NULL))

将srand调用放入构造函数并将其从myRand中删除。然后重试。这样做并尝试执行三次@MartinEttl它们仍然有相同的结果..我不明白为什么放入构造函数会改变它..当然,在调用rand()之前,必须确保srand()被调用一次.@MartinEttl,这不管用…顺便说一句,请减少您的示例代码!将您的srand调用放入构造函数并将其从myRand中删除。然后重试。这样做并尝试执行三次@MartinEttl他们仍然有相同的结果..我不明白为什么放入构造函数会改变它..当然,您必须确保sran在调用rand()之前调用d()一次.@MartinEttl这是可行的…顺便说一句,请减少您的示例代码!好的,这会使计算机和播放器有所不同。但是当您尝试通过执行./main.out重新运行它时,它会给您与上一轮相同的结果…我现在如何修复它?不要在一秒钟内运行两次20秒仍然修复它@user4581301:(.这很奇怪。你可能陷入了怪圈。这个问题已经很好地解决了,应该可以解决了。我推荐一个关于你当前代码、测试条件和输出的新问题。你在不消除怪圈的情况下最小化测试用例所做的任何事情都将受到赞赏——没有所有代码,也很难解决怪圈uch代码为多个bug聚集在你身上留下了很大的空间,这对你来说是一种教育。通常,尽量减少寻找将问题简化到最基本的方法会告诉你如何解决问题。但如果我问新问题@user4581301 stackoverflow,成员们会说这是这个问题的重复。好吧,这可以让计算机和游戏工作起来r different.但是当您尝试通过执行./main.out重新运行它时,它会给您与上一轮相同的结果…现在我如何修复它?不要在一秒钟内运行两次20秒仍然会修复它@user4581301:(.这很奇怪。你可能陷入了怪圈。这个问题已经很好地解决了,应该可以解决了。我推荐一个关于你当前代码、测试条件和输出的新问题。你在不消除怪圈的情况下最小化测试用例所做的任何事情都将受到赞赏——没有所有代码,也很难解决怪圈uch代码给多个bug留下了足够的空间,让它们聚集在你身上——这对你来说是一个教育。通常,尽量减少寻找将问题简化为最基本问题的方法会告诉你如何解决问题。但是如果我问一个新问题@user4581301 stackoverflow,成员们会说这是这个问题的重复。.srand(std::time(NULL))你能打印一下std::time(NULL)
的输出,看看是否有一个整数每秒递增。当我运行
std::time(NULL)
,而不是
std:time(NULL)时,请按一下它的
146352348
@Universe:然后,如果打印函数的输出
myRand(0,10)
,你应该得到一个在适当范围内正确生成的随机数;我编译了你的代码,这就是我得到的。伯劳克…我们可以在这里这样做吗?因为这就是我实际操作游戏的地方…如果我们能在那里修复它,那会容易得多…对我来说,现在它不工作了..srand(std::time(NULL))你能打印一下std::time(NULL)的输出,看看是否有一个整数每秒递增。当我运行
std::time(NULL)
,而不是
std:time(NULL)时,请按一下它的
146352348
@Universe:然后,如果打印函数的输出
myRand(0,10)
,你应该得到一个在适当范围内正确生成的随机数;我编译了你的代码,这就是我得到的。伯劳克……我们可以在这里这样做吗?因为这就是我实际操作游戏的地方……如果我们能在那里修复它,会容易得多……对我来说,现在它不工作了。。
srand(NULL)