我还不太擅长这个,而且我正在努力学习如何让用户声明的变量在我的方程中工作。 现在我只想让计算机根据用户指定的最大数量吐出一个随机乘法。
当我尝试运行时,机器会回吐这些错误:
12:16: error: ambiguous overload for 'operator>>' in 'std::cin >> 32767'
14:61: error: 'x' was not declared in this scope
14:64: error: 'y' was not declared in this scope
15:16: error: statement cannot resolve address of overloaded function
20:9: error: declaration of 'int x' shadows a parameter
21:5: error: expected ',' or ';' before 'int
最终目标是计算机将在难度参数内生成问题,然后删除等式中的一个变量以对用户进行测验。
#include <cstdlib>
#include <iostream>
using namespace std;
int mult( int x, int y );
int main()
{
cout <<"Please enter a number between 2 and 21, this will determine how difficult your problems are.";
cin >> RAND_MAX;
cin.ignore();
cout << "The product of your numbers is:" << mult ( x, y ) <<"\n";
cin.get;
}
int mult (int x, int y)
{
int x = rand()
int y = rand()
return x * y;
}
答案 0 :(得分:1)
这里有很多错误。我会尽力善良。
rand()
来电后都需要分号。 x
和y
未在main()
中的任何位置声明。我不知道为什么你把它们作为参数传递给mult()
,但我认为会有一些相关的功能。
RAND_MAX
是常量,因此cin >> RAND_MAX
毫无意义。相反,请参阅@ Bill的回答。 cin.get
之后的parens。这是一个有效的例子,希望这是你想要的:
#include <cstdlib>
#include <iostream>
using namespace std;
int mult( int x, int y, int randMax );
int main()
{
int x = 0,
y = 0,
randMax;
cout <<"Please enter a number between 2 and 21, this will determine how difficult your problems are.";
cin >> randMax;
cin.ignore();
cout << "The product of your numbers is:" << mult ( x, y, randMax ) <<"\n";
cin.get();
}
int mult (int x, int y, int randMax)
{
x = rand() % randMax;
y = rand() % randMax;
return x * y;
}
答案 1 :(得分:0)
其他人指出了一些问题,例如尝试修改RAND_MAX
,期望改变rand()
的运作方式。我只想展示如何使用现代<random>
库代替rand()
。
有许多理由不使用rand()
。
对您的情况最重要的原因是,使用它来正确获取您想要的范围内的值并不是直截了当的。人们最常见的方式是rand() % randMax + 1
,但对于randMax
的大多数值,这实际上会比其他数字更频繁地产生[1,randMax]范围内的一些数字。如果获得均匀分布的数字很重要,那么你需要更多的东西:
int v;
do {
v = rand();
} while (v >= RAND_MAX / randMax * randMax);
v = v % randMax + 1;
这不是那么简单。 <random>
提供了许多预先制作的发行版,因此您通常不必像这样编写自己的发行版。
不使用rand()
的其他原因是它在多线程程序中不是线程安全的或易于使用的,并且通常它不是非常随机的。 <random>
也可用于解决这些问题。
以下是使用<random>
的程序版本。
#include <random>
#include <iostream>
// global random number engine and distribution to use in place of rand()
std::default_random_engine engine;
std::uniform_int_distribution<> distribution;
int mult()
{
int x = distribution(engine);
int y = distribution(engine);
return x * y;
}
int main()
{
std::cout << "Please enter a number between 2 and 21, this will determine how difficult your problems are.";
int max;
std::cin >> max;
// set the global distribution based on max
distribution.param(std::uniform_int_distribution<>(1,max).param());
std::cout << "The product of your numbers is:" << mult() << "\n";
}