C ++中一些无法解释的错误

时间:2012-08-24 17:39:15

标签: c++

我有以下代码:

#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`inndomize'underclared(首次使用此功能)
  • (每个未声明的标识符仅针对它出现的每个函数报告一次。)
  • 11 E:\ c ++ \ main.cpp`random'uncacclared(首次使用此功能)

任何人都可以帮助我理解为什么会出现这些错误吗?

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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

答案 2 :(得分:1)

您尝试调用的方法称为srandrand

randomizerandom不属于该语言。

答案 3 :(得分:1)

标准C中没有randomize()random()个函数。也许您的意思是srand()rand()

看看this question, on how to correctly "randomise" a number in a given rangerand() % N不能统一给出[0,N]范围内的数字。

答案 4 :(得分:1)

如果你有一个包含<random>的C ++ 11编译器(如果没有,你可以使用Boost库中的boost::random),你可以使用这个类来获得更好的伪随机数:

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

您不需要手动播种,因为它将在第一次调用时播种。