我正在制作一个非常简单的“数学导师”程序,我需要在其中显示一个包含 4 个选项的菜单:加法、减法、乘法和退出。程序应该循环直到我选择退出。
到目前为止一切似乎都正常,但我无法弄清楚每次程序循环时如何生成一个新的随机数。
代码如下:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int addFirstNum,
addSecondNum,
subFirstNum,
subSecondNum,
multFirstNum,
multSecondNum,
operNum,
num;
bool temBool = true; //Temporary boolean used in the while loop
unsigned seed; // Random generator seed
// Use the time function to get a "seed" value for srand
seed = time(0);
srand(seed);
//Random generated operands
addFirstNum = rand() % 40 + 10;
addSecondNum = rand() % 40 + 10;
subFirstNum = rand() % 40 + 10;
subSecondNum = rand() % 40 + 10;
multFirstNum = rand() % 40 + 10;
multSecondNum = rand() % 40 + 10;
while (temBool) //Start of the loop
{
// Menu of Math Tutor
cout << "Math Tutor - Main Menu";
cout << endl << endl;
cout << "1. Adittion\n";
cout << "2. Subtraction\n";
cout << "3. Multiplication\n";
cout << "4. Exit Program\n";
cout << endl << endl;
cout << "Choose your operation to practice (1-4) ";
cin >> operNum;
cout << endl << endl;
// Switch for the menu's options
switch (operNum)
{
case 1:
cout << "Working with addition\n";
cout << setw(3) << addFirstNum << "\n"
<< "+" << addSecondNum << "\n"
<< "---\n";
cout << "Your answer: ";
cin >> num;
if(num == addFirstNum + addSecondNum)
{
cout << "Correct answer: "
<< addFirstNum + addSecondNum << " Congratulations!\n";
}
else
{
cout << "Correct answer: "
<< addFirstNum + addSecondNum << " Sorry!\n";
}
cout << endl << endl;
break;
case 2:
cout << "Working with subtraction\n";
cout << setw(3) << subSecondNum << "\n"
<< "-" << multFirstNum << "\n"
<< "---\n";
cout << "Your answer: ";
cin >> num;
if(num == subSecondNum - multFirstNum)
{
cout << "Correct answer: "
<< subSecondNum - multFirstNum << " Congratulations!\n";
}
else
{
cout << "Correct answer: "
<< subSecondNum + multFirstNum << " Sorry!\n";
}
cout << endl << endl;
break;
case 3:
cout << "Working with multiplication\n";
cout << setw(3) << multFirstNum << "\n"
<< "*" << multSecondNum << "\n"
<< "---\n";
cout << "Your answer: ";
cin >> num;
if(num == multFirstNum * multSecondNum)
{
cout << "Correct answer: "
<< multFirstNum * multSecondNum << " Congratulations!\n";
}
else
{
cout << "Correct answer: "
<< multFirstNum + multSecondNum << " Sorry!\n";
}
cout << endl << endl;
break;
case 4:
cout << "Thank you for using Math Tutor.\n";
temBool = false;
break;
default: cout << "Incorrect menu seletion. Please choose between 1 and 4.\n";
return 0;
}
}
}
最佳答案
简单:
在循环内移动随机值生成器行:
seed = time(0);
srand(seed); //setting the seed should only be done outside the loop (as per original code)
while (temBool) //Start of the loop
{
//Random generated operands
addFirstNum = rand() % 40 + 10;
addSecondNum = rand() % 40 + 10;
subFirstNum = rand() % 40 + 10;
subSecondNum = rand() % 40 + 10;
multFirstNum = rand() % 40 + 10;
multSecondNum = rand() % 40 + 10;
//...
}
现在每次循环,数字都会有一个新值。
编辑:Answer 现在在循环外显式显示 srand(seed)
,以防您的问题是将该代码移入循环。
另外,喜欢 whozcraig说过,您每次只需要两个随机数,因为您每次只使用生成的数字中的两个。
关于c++ - 每次调用变量时如何生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26232307/