我有以下代码:
#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;
}
错误是:
任何人都可以帮助我理解为什么会出现这些错误吗?
答案 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();
) - 编译器不知道在哪里找到这个函数,因为它没有在你的代码中定义,也没有在你的任何标题中定义包括
例如 - 您可以重写现有代码,如下所示。要使用此代码,您还需要在包含中添加#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)
答案 3 :(得分:1)
标准C中没有randomize()
和random()
个函数。也许您的意思是srand()
和rand()
?
看看this question, on how to correctly "randomise" a number in a given range。 rand() % 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);
您不需要手动播种,因为它将在第一次调用时播种。