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 在函数“int main()”中:
  • 10 E:\c++\main.cpp `randomize' undeclared (首先使用这个函数)
  • (每个未声明的标识符只针对它出现的每个函数报告一次。)
  • 11 E:\c++\main.cpp `random' undeclared (首先使用这个函数)

谁能帮我理解为什么会发生这些错误?

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

您正在使用一个count=0; randomize();名为“randomize”的函数(此处:) - 编译器不知道在哪里可以找到此函数,因为它没有在您的代码中定义,也没有在您包含的任何头文件中定义。

我怀疑你想要srand()and 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

您尝试调用的方法称为srandrand

randomize并且random不是语言的一部分。

于 2012-08-24T17:40:52.487 回答
1

标准 C中没有randomize()andrandom()函数。也许你的意思是srand()and rand()

看看这个问题,关于如何正确“随机化”给定范围内的数字rand() % N不统一给出 [0, N) 范围内的数字。

于 2012-08-24T17:41:11.417 回答
1

If you have a C++11 compiler that includes <random> (if you don't, you can use boost::random from Boost library), you can use this class for better pseudo-random numbers:

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

Then you use this to get random numbers in a [a,b] interval:

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

You don't need to seed it manually as it will be seeded on first invocation.

于 2012-08-24T17:59:19.263 回答