解决srand()与rand()每次运行结果一样的问题

来源:互联网 发布:利基通讯淘宝店可靠吗 编辑:程序博客网 时间:2024/05/18 20:09

做了一个猜数字的游戏,用srand()与rand()对随机数进行初始化,可以每次的运行结果都一样.
Eg.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int number;

srand(0)
  for(int i=0;i<=9;i++)
{
  number=rand();
  cout<<number;
}        
return 1;
}

每次运行的值都是一样的.
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。

可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。
那样的话,如上面的程序,它就一直是相同的结果,那里我们调用了rand()函数10次,每次生成的数都不一样,但把程序再运行一遍,产生的序列跟上次一样,这就是“伪随机”的含义:种子不变,随机数其实是固定的。 要想让计算机生成一些不固定的,真正随机的东西,就只有靠取系统时间了。下面这个程序用时间设随机数种子,可以得到真正的随机              
Eg.
#include <iostream>
#include <cstdlib>

#include <ctime>
using namespace std;
int main()
{
int number;

srand((unsigned)time(NULL)) // 这个方法是告诉rand方法以time为种子去生成随机数!
  for(int i=0;i<=9;i++)
{
  number=rand();
  cout<<number;
}        
return 1;
}