该程序是一个高低猜谜游戏,其中生成随机数,并且用户有6次尝试猜测该数字。我只复制了我的main函数和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);
}
答案 0 :(得分:1)
从问题的标题我得到的主要问题是随机生成数字
如果我在这里是我的建议(否则你应该重新提出你的问题,通过提供你需要的其他信息):
您的随机生成器不正确,
由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);