当我在Visual Studio中运行程序时,C ++随机数生成器通常会在2次后停止生成数字

时间:2018-04-11 07:49:30

标签: c++ visual-studio

你好我对编码比较新(在计算机编程的介绍中)我应该写一个生成随机数(1-3)的代码,目的是选择要显示的表,并且它不能重复。然而,每当我运行该程序时(在visual studio上)它通常会在前两次完美,然后第三次程序暂停,我在Windows控制台中使用闪烁的短划线。我确定我只是错过了一个愚蠢的错误,但这完全是为了学习。     我在线阅读最好将srand(time(NULL));从循环中取出并将其放在main的开头,以便我做的事情。

srand(time(NULL)); 


int beginGame(int playedBoard[])
{
    int randomNum;
    do
    {
        randomNum = (rand() % (3 - 1)) + 1;
        if (playedBoard[randomNum - 1] == NULL)
            return randomNum;
    } while (playedBoard[randomNum - 1] != NULL);
}

1 个答案:

答案 0 :(得分:1)

花时间使用带有c ++ 11,不推荐使用的库的随机生成器,避免所有陷阱。

http://en.cppreference.com/w/

下面是一个如何创建一个将在(m,n)之间返回int的生成器的示例:

#include <random>
#include <limits>

auto int_generator(int lower_bound_inclusive =
         std::numeric_limits<int>::min(),
         int upper_bound_inclusive =
         std::numeric_limits<int>::max()) {

    int const lbi = lower_bound_inclusive;
    int const ubi = upper_bound_inclusive;

    static std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_int_distribution<int>
      dist(lbi, ubi);

    return [dist, mt]() mutable { return dist(mt); };
}

用法:

auto dice = int_generator(1, 6); //Generate a random number generator that yields numbers between 1 and 6 inclusive
dice(); //One random number
dice(); //Another random number