目录
rand()函数
rand 函数返回范围为 0 到 RAND_MAX的伪随机整数。在调用 rand 之前,使用 srand 函数为伪随机数生成器设定种子。 ran函数的头文件是<stdlib.h>
RAND_MAX
我们将RAND_MAX,复制到VS编译器中,选中右击,选择转到定义,我们可以查看RAND_MAX的范围,在这里我们可以看到RAND_MAX为0x7fff,转换为10进制32767
srand()函数
srand()函数头文件是<stdlib.h> ,调用的类型是整数,srand函数里面是数字多少,rand函数就会从数字多少开始产生随机值,随机值范围是sradn函数里面的数字到32767
调用rand和srand函数
我们第一次调用后结果是365,在重新调用一次,结果还是365
当我们把srand()里面的数字换了之后,再次调用我们发现这个随机值会变
当但随机值等于200,我们第二次调用时,产生的随机值还是691
因此可见如果,srand()里面的值不变每次调用的结果都一样,为了让每次产生的随机值不一样,我们可利用time函数,让srand()里面的值随时间的变化而变化
time()函数
time()函数的头文件时<time.h>,返回类型时time_t,time_t也是一种整形类型
我们将time()函数的返回值,放到srand()函数中,这样srand()函数中的值就随时在变化,由于srand()函数中的值是整型,而time的返回值是整型。因此我们这样将time()函数放到srand()函数中
接下来,我们测试产生的随机值,我们要求产生1-100的随机值
我们发现这三次测试结果都不相同
用srand函数实现猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*************************\n");
printf("******1.play*************\n");
printf("******0.exit*************\n");
printf("*************************\n");
}
void game()
{
int ret = rand() % 100 + 1;
while (1)
{
printf("请输入一个数字:\n");
int guess;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else if(guess==ret)
{
printf("猜对了,这个数字是:%d\n", guess);
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int input;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
printf("进入猜数字游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入:\n");
}
} while (input);
return 0;
}