0

私は次のコードを持っています:

#include <cstdlib>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
 int a,n,count;
 count=0; randomize();
 a=1+random(100);  
 cout<<"Enter A No. Between 1 to 100";
 do
  { 
    cin>>n;
    count++;
    if(n>a)
           cout<<"Enter a lower no.";
    else if(n<a)
           cout<<"Enter a higher no.";
    }while(n!=a);
cout<<count;

system("PAUSE");
return EXIT_SUCCESS;
}

エラーは次のとおりです。

  • E:\ c ++\main.cpp関数`intmain()':
  • 10 E:\ c ++ \ main.cpp `randomize'undeclared(最初にこの関数を使用)
  • (宣言されていない各識別子は、表示される関数ごとに1回だけ報告されます。)
  • 11 E:\ c ++ \ main.cpp `random'が宣言されていません(最初にこの関数を使用してください)

誰かがこれらのエラーが発生している理由を理解するのを手伝ってもらえますか?

4

5 に答える 5

5

randomize()は標準のC++関数ではないためsrand(something)、乱数ジェネレーターをシードするために使用する必要があります。something通常は現在の時刻(time(0))になります。

また、random()標準機能ではありませんので、使用する必要がありますrand()

だから、このようなもの(少しクリーンアップ):

#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    srand(time(0));
    int n, count = 0;
    int a = 1 + (rand() % 100);  
    cout << "Enter A No. Between 1 to 100";
    do
    { 
        cin >> n;
        count++;
        if (n>a)
            cout << "Enter a lower no.";
        else if (n<a)
            cout << "Enter a higher no.";
    } while(n!=a);
    cout << count;

    system("PAUSE");
    return EXIT_SUCCESS;
}
于 2012-08-24T17:41:46.853 に答える
3

「randomize」という名前の関数(ここでは:)を使用しています。count=0; randomize();この関数はコードやインクルードするヘッダーで定義されていないため、コンパイラーはこの関数の場所を認識していません。

私はあなたが欲しかったのではないかsrand()と思いますrand()


たとえば、既存のコードを次のように書き直すことができます。このコードを使用するには、インクルードにも次#include <time.h>のことを含める必要があります。

int main()
{
 int a,n,count;
 count=0; 
 srand(time(NULL)); // use instead of "randomize"
 a = 1 + (rand() % 100); 
 // ... Rest of your code
于 2012-08-24T17:40:53.603 に答える
2

呼び出そうとしているメソッドはとと呼ばれsrandますrand

randomizerandom言語の一部ではありません。

于 2012-08-24T17:40:52.487 に答える
1

randomize()標準Cには機能はありませんrandom()。多分あなたはとを意味srand()rand()ますか?

与えられた範囲の数を正しく「ランダム化」する方法について、この質問を見てください。rand() % N[0、N)の範囲の数値を均一に与えるわけではありません。

于 2012-08-24T17:41:11.417 に答える
1

以下を含むC++11コンパイラを使用し<random>ている場合(含まれていない場合はboost::random、Boostライブラリから使用できます)、このクラスを使用して、より優れた疑似乱数を得ることができます。

#include <ctime>
#include <random>

class rng
{
private:
    std::mt19937 rng_engine;

    static rng& instance()
    {
        static rng instance_; 
        return instance_;
    }

    rng() {
        rng_engine.seed(
            static_cast<unsigned long>(time(nullptr))
            );
    };

    rng(rng const&);
    void operator=(rng const&);

public:
    static long random(long low, long high)
    {
        return std::uniform_int_distribution<long>
              (low, high)(instance().rng_engine);
    }
};

[a,b]次に、これを使用して、間隔内の乱数を取得します。

long a = rng::random(a, b);

最初の呼び出しでシードされるため、手動でシードする必要はありません。

于 2012-08-24T17:59:19.263 に答える