我正在尝试创建一个程序,根据用户输入的最大值乘以随机数

时间:2013-07-22 18:39:31

标签: c++ random

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 您的两次rand()来电后都需要分号。
  2. {li> xy未在main()中的任何位置声明。我不知道为什么你把它们作为参数传递给mult(),但我认为会有一些相关的功能。
  3. RAND_MAX是常量,因此cin >> RAND_MAX毫无意义。相反,请参阅@ Bill的回答。
  4. 您需要cin.get之后的parens。
  5. 这是一个有效的例子,希望这是你想要的:

    #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";
}