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

最終的な目標は、コンピューターが難易度パラメーター内で問題を生成し、方程式の変数の 1 つを削除して、ユーザーにクイズを出題することです。

#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 に答える