0

我还不是很擅长这个,我正在尝试学习如何让用户声明的变量在我的方程中工作。现在,我只想让计算机根据用户指定的最大数字吐出一个随机乘法。

当我尝试运行它时,机器会吐出这些错误:

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;
}
4

2 回答 2

1

这里有很多错误。我会努力善良的。

  1. 两次通话后都需要分号rand()
  2. x并且y没有在main(). 我不知道你为什么将它们作为参数传递给mult(),但我认为接下来会有一些相关的功能。
  3. RAND_MAX是一个常数,所以cin >> RAND_MAX没有意义。相反,请参阅@Bill 的回答。
  4. 之后你需要括号cin.get

这是一个工作示例,希望这是您想要的:

#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;
}
于 2013-07-22T19:01:04.267 回答
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";
}
于 2013-07-22T20:08:15.857 回答