我正在编写一个带有返回随机数的函数的代码。随机数是从0输入到我输入的最大数。除此之外我必须生成3个随机数,然后随机数将返回char' - ' ' +' ' *'代替。代码无法正常工作。每当我输入100时,生成的随机数始终为41,生成char的另一个随机数总是生成 - 带笑脸的符号(不开玩笑,char符号旁边会出现一个笑脸)。谁能告诉我我的代码有什么问题?非常感谢你的帮助。
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main()
{
int getNumber(int);
char getOperator(int);
int max = 0;
int randOperator = 0;
cout << "Enter a value(1- 101)" << endl;
cin >> max;
while((max < 0) || (max > 101))
{
cout << "invalid value. Please enter a value (1 - 101)" << endl;
cin >> max;
}
cout << endl;
cout << getNumber(max) << endl;
cout << getOperator(randOperator);
}
int getNumber(int max)
{
int hehe;
hehe = rand()% max;
return hehe;
}
char getOperator(int randOperator)
{
for(int x = 0; x < 5; x++)
{
randOperator = rand() % 3;
if(randOperator = 0)
{
cout << '+';
}else if(randOperator = 1)
{
cout << '-';
}else
{
cout << '*';
}
return randOperator;
}
}
答案 0 :(得分:3)
此代码应解决您的问题
#include <iostream>
#include <cmath>
#include <cstdlib>
#include<time.h>
using namespace std;
int main()
{
srand(time(NULL));
int getNumber(int);
char getOperator(int);
int max = 0;
int randOperator = 0;
cout << "Enter a value(1- 101)" << endl;
cin >> max;
while((max < 0) || (max > 101))
{
cout << "invalid value. Please enter a value (1 - 101)" << endl;
cin >> max;
}
cout << endl;
cout << getNumber(max) << endl;
cout << getOperator(randOperator);
}
int getNumber(int max)
{
int hehe;
hehe = rand()% max;
return hehe;
}
char getOperator(int randOperator)
{
for(int x = 0; x < 5; x++)
{
randOperator = rand() % 3;
if(randOperator == 0)
{
return '+';
}else if(randOperator == 1)
{
return '-';
}else
{
return '*';
}
}
}
要在每次运行程序时生成不同的随机数,您需要为rand()
设定种子。您可以使用我在此代码中使用的srand()
来完成此操作。
你犯了一个粗心的错误
if(randOperator = 0)
和
else if(randOperator = 1)
如果仔细观察,您会发现已使用=
代替==
来检查是否相等。 =
将分配值,因此要检查是否相等,请使用我的代码中指示的==
。
现在在你的代码的这一部分
char getOperator(int randOperator)
{
for(int x = 0; x < 5; x++)
{
randOperator = rand() % 3;
if(randOperator = 0)
{
cout << '+';
}else if(randOperator = 1)
{
cout << '-';
}else
{
cout << '*';
}
return randOperator;
}
}
函数的返回类型是char,你返回一个int。在我的代码中,我使用cout << '+';
而不是return '+';
。通过这样做,操作员可以按照您的意愿返回。
嗯,这是为了解释。如果您需要更多解释,请询问。
答案 1 :(得分:0)
有两个错误:
第一个bug:
在函数getOperator中,您在if
语句中指定一个值,而不检查是否相等!为此,您必须使用==
。
结果,你总是' - '得到结果。因为randOperator=1
的结果是1,所以这是真的。
char getOperator(int randOperator)
{
for(int x =0; x < 5; x++)
{
randOperator = rand() % 3;
if(randOperator == 0) //!!!!! You used (randOperator = 0) which will be interpreted as false
{
cout << '+';
}else if(randOperator == 1) // !!!!!! You used (randOperator = 1) which will be interpreted as true
{
cout << '-';
}else
{
cout << '*';
}
return randOperator;
}
}
第二个错误(笑脸)
你把操作员拿出来并给予rand(笑脸)的值,这个值由for
覆盖,只运行一次(因为返回)?!
请改为尝试:
char getOperator(int randOperator)
{
randOperator = rand() % 3;
if(randOperator == 0) //!!!!! You used (randOperator = 0) which will be interpreted as false
{
return '+';
}else if(randOperator == 1) // !!!!!! You used (randOperator = 1) which will be interpreted as true
{
return '-';
}
return '*';
}
仍然像地狱一样难看,但它会起作用。