C++ 如何在每次调用变量时生成一个随机数?
我正在制作一个非常简单的“数学导师”程序,我需要显示一个包含4个选项的菜单:加法、减法、乘法和退出。程序应该循环,直到我选择退出 到目前为止,一切似乎都在运行,但我不知道如何在每次程序循环时生成一个新的随机数 代码如下:C++ 如何在每次调用变量时生成一个随机数?,c++,C++,我正在制作一个非常简单的“数学导师”程序,我需要显示一个包含4个选项的菜单:加法、减法、乘法和退出。程序应该循环,直到我选择退出 到目前为止,一切似乎都在运行,但我不知道如何在每次程序循环时生成一个新的随机数 代码如下: #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; int main() { i
#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;
}
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
int addFirstNum,
addSecondNum,
亚第一,
亚秒,
multFirstNum,
multSecondNum,
operNum,
号码;
bool temBool=true;//在while循环中使用临时布尔值
无符号种子;//随机生成器种子
//使用时间函数获取srand的“种子”值
种子=时间(0);
srand(种子);
//随机生成的操作数
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)//循环的开始
{
//数学家教菜单
cout简单:
在循环内移动随机值生成器行:
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;
//...
}
现在每次循环时,数字都会有一个新值
编辑:答案现在显示srand(seed)
显式位于循环之外,以防您的问题是将代码移动到循环中。
此外,正如前面所说,每次只需要两个随机数,因为每次只使用生成的两个数。简单:
在循环内移动随机值生成器行:
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;
//...
}
现在每次循环时,数字都会有一个新值
编辑:答案现在显示srand(seed)
显式位于循环之外,以防您的问题是将代码移动到循环中。
同样,正如前面所说的,每次只需要两个随机数,因为每次只使用生成的两个数字。只是对Baldrick的一个加法回答,当您使用时间(0)进行种子设定,然后只执行一个while循环,没有任何停止或询问用户下一步要做什么(退出/继续),值将与您使用相同的时间值(时间值没有改变,因为while循环处理程序很快)。也许这不是问题所在,但最好知道:)当您使用时间(0)进行种子设定时,这只是对Baldrick的一个补充回答然后只做一个while循环,没有任何停止或询问用户下一步做什么(退出/继续),这些值将与您使用相同的时间值播种的值相同(时间值没有改变,因为while循环快速处理程序)。也许这不是问题所在,但很高兴知道:)感谢您的快速响应!这似乎很明显,但我尝试用这种方式编译它,但仍然没有得到新的数字。我从您的代码开始,将随机数生成放入循环中,并使其循环5次。检查:谢谢,看起来它会起作用k、 但我仍然在将它合并到代码中时遇到问题,这样每次它都会给我新的数字。例如,我选择1(加法)我会在收到祝贺信息后马上做这件事,我再次看到菜单,如果我再次选择1,我会得到相同的数字,而不是一组新的随机数字。我知道我遗漏了一些小东西,但我看不到。谢谢you@RufioLJ它应该看起来很理想。(我删除了大量重复的数字;每个迭代只需要两个)@RufioLJ您没有碰巧在循环中移动srand(seed);
?这会产生相同的“随机”每次排序。感谢您的快速响应!这似乎很明显,但我尝试以这种方式编译它,但仍然没有得到新的数字。我从您的代码开始,将随机数生成放入循环中,并使其循环5次。请查看:谢谢,看起来它会起作用,但我仍然有问题将它添加到我的代码中,这样每次它都会给我新的数字。例如,我选择1(加法)我会在收到祝贺信息后马上做这件事,我再次看到菜单,如果我再次选择1,我会得到相同的数字,而不是一组新的随机数字。我知道我遗漏了一些小东西,但我看不到。谢谢you@RufioLJ它应该看起来很理想。(我删除了大量重复的数字;每个迭代只需要两个)@RufioLJ您没有碰巧在循环中移动srand(seed);
?这会产生相同的“随机”每次排序。这似乎是一个问题,因为循环时我没有得到新的值。只有当我再次运行程序时。谢谢你的帮助。这个答案加上Baldrickk's正在引导我进入解决方案。这个信息实际上是我需要处理的。只要种子不在循环中,那么来自rand()的输出
将不同。行seed=time(0);srand(seed);
应该保持在循环之外。编辑我的答案以使其更明确。这似乎是一个问题,因为我在循环时没有得到新的值。只有当我再次运行程序时。感谢您的帮助。这个答案加上Baldrickk的答案正在引导我进入解决方案。这些信息实际上是我需要处理的。只要ed不在循环中,则来自rand()
的输出将不同。行seed=time(0);srand(seed);
应保持在循环之外。编辑我的答案以使其更明确。