目录
1. rand
stdlib.h提供一个生成随机数函数:rand,原型如下:
int rand (void);
rand返回伪随机数,范围在0~RANG_MAX,RANG_MAX取决于编译器,一般为32767。
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
运行后不难发现随了个寂寞。因为rand函数生成随机数的默认种子是1。要生成不同的随机数,就要让种子变化。
2. srand
srand,顾名思义seed+rand,可以设置随机数种子,原型如下:
void srand (unsigned int seed);
调用 rand 函数前先调用srand 函数,通过 srand 函数的参数seed来设置rand函数种子,每次生成成的随机数序列随之变化。
那么接下来的问题就是如何随机种子。
3.time
时间时刻变化,因此可以用时间作种子。
time.h提供一个获取时间的函数time,原型如下:
time_t time (time_t* timer);
time返回当前程序运行时间与1970年1月1日0时0分0秒的差值,单位为秒。time函数的参数 timer 若是非NULL指针,函数会将这个返回的差值放在timer指向的内存中。仅返回时间戳可以这样写:
time(NULL);
游戏实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game(){
int r = rand() % 100 + 1;//生成1~100之间的随机数
int guess = 0;
int count = 5;
while (count){
printf("\n你还有%d次机会\n", count);
printf("请猜数字(≧o≦) ");
scanf("%d", &guess);
if (guess < r){
printf("猜小了/(^o^)\\\n");
}
else if (guess > r){
printf("猜大了\\(^o^)/\n");
}
else{
printf("恭喜你,猜对了o(≧▽≦)o\n");
break;
}
count--;
}
if (count == 0){
printf("你失败了,正确值是:%d(*^o^*)\n", r);
}
}
void menu(){
printf("***********************\n");
printf("****** 1. play ********\n");
printf("****** 0. exit ********\n");
printf("***********************\n");
}
int main(){
int input = 0;
srand((unsigned int)time(NULL));//srand参数是unsigned int类型
do{ //使用time函数的返回值设置种子
menu();
printf("请选择 (≧o≦):");
scanf("%d", &input);
switch (input){
case 1:
game();
break;
case 0:
printf("游戏结束(^_^)\n");
break;
default:
printf("选择错误,重新选择(TAT)\n");
break;
}
} while (input);
return 0;
}