为猜谜游戏生成一个随机数生成器
Generating a random number generator for a guessing game
这个程序是一个高低猜谜游戏,其中生成一个随机数,用户有6次尝试猜测该数字。我只复制了我的主函数和DrawNum和GetGuess函数的定义,如果问/需要,将发布更多。我的目标是让DrawNum函数返回随机数,并在GetGuess函数中调用DrawNum函数(如果这是最有效的方法)。该函数构建良好,但当我运行程序时,我得到运行时检查失败#3 -变量'MaxNum'正在使用而未初始化。
int main ()
{
int money;
int bet;
int guesses;
unsigned int seed = 0;
srand(static_cast<unsigned>(time(NULL))); //get a value for the time from the computer's clock and with
srand (seed); //it calls srand to initialize "seed" for the rand() function
PrintHeading (); //Prints output heading
GetBet (money, bet);
GetGuess ();
CalcNewMoney (money, bet, guesses);
bool PlayAgain ();
}
int DrawNum (int max)
{
double x = RAND_MAX + 1.0; /* x and y are both auxiliary */
int y; /* variables used to do the */
/* calculation */
y = static_cast<int> (1 + rand() * (max / x));
return (y); /* y contains the result */
}
int GetGuess ()
{
int guess; //user's guess
int guesses; //number of Guesses
int MaxNum;
int RandNum;
RandNum = DrawNum (MaxNum);
for (int guesses = 1; guesses <= 6; guesses++)
{
cout << "Guess " << guesses << ":" << endl;
cin >> guess;
if (guess > RandNum)
{
cout << "Too high... " <<endl;
}
else if (guess == RandNum)
{
cout << "Correct!" << endl;
}
else
{
cout << "Too low... " << endl;
}
}
return (guesses);
}
从问题的标题中我知道你主要关心的是数字的随机生成。
如果我说对了,这是我的建议(否则你应该通过提供你所需要的额外信息来重新表述你的问题):
你的随机生成器不正确,rand()生成的随机数不是均匀分布的,这是众所周知的事实,使用% -会导致顺序中的第一个数字很幸运地被选中。
所以我建议你使用random_engine generator或random_device
std::default_random_engine generator(time(0));
std::uniform_real_distribution<double> distribution(first, last);
return distribution(generator);
缺点:如果打开乘法程序使用相同的随机数生成器,它们将输出相同的结果,因为它们具有相同的种子值,即时间。使用随机装置可以解决此问题,请参阅后面的说明:
std::uniform_real_distribution<double> distribution(first, last);
std::random_device rd;
std::default_random_engine generator( rd() );
return distribution(generator);
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 如何在 c++ 中从数组中选择一个随机数?
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- 从大范围内生成一个随机数,但从大范围的中间开始生成较小的范围
- 如何在C++中创建数字列表,以便它可以选择一个随机数?
- 在 Xcode 8.3 上构建一个C++正态分布式随机数生成器
- Main.cpp和随机数生成器C++的一个函数
- 随机数生成器为一个或两个骰子
- 是否反复向随机数生成器播种一个合理的哈希函数
- 随机数生成器为c++弹出一个错误
- 随机数生成器不会给我一个随机数
- 一个好的随机数生成器的想法是什么
- 为猜谜游戏生成一个随机数生成器