rand函数产生0~RAND_MAX之间的伪随机整数。
RAND_MAX一般为32767(根据编程环境有所差别)
Initialize random number generator(srand是初始化随机数的生成器)。
暂且称函数srand的参数为种子。
因为种子固定了,rand所生成的伪随机数列也是固定的。如图,这是我在vs环境下的运行结果。种子是1,rand第一个生成的数一直是41,之后的伪随机数列也都相同,一直是41,18467,6334…………(rand函数的默认种子是常量1)。
所以需要改变srand的参数。(为了随机数而设置随机数,这看似矛盾,其实后者只要是连续变化的就行)
而时间是连续变化的。我们可以用time函数来返回一个时间戳(一个数字)。
由于time函数的返回值是time_t,而srand的参数是unsigned int,强制类型转换一下就行。
得到
srand((unsigned int)time(NULL));
这样rand函数可以生成随机数了。
需要注意 srand((unsigned int)time(NULL));只要调用一次就够了,可能在那一秒时间戳是一样的,所以rand生成的值也一样。可以封装成一个函数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
int input;
do
{
scanf("%d", &input);
printf("%d\n", rand());
} while (input);
}
int main()
{
srand((unsigned int)time(NULL));
game();
return 0;
}
生成的数字肯定是随机的。
P.S.
rand,srand 要引头文件#include <stdlib.h>
time 要引头文件#include <time.h>