游戏要求
- 电脑自动生成1-100的随机数
- 猜数字过程中,根据猜测数据的大小,反馈猜测数据是大了还是小了,猜对便反馈猜对了,有6次机会。
随机数生成
rand();//生成随机数
srand();//初始化随机数的生成器
time();//获取时间戳
rand()
int rand(void);
rand()可以生成随机数,但是返回的是伪随机数,范围在0-RAND_MAX(大部分是32767))之间。
需包含头文件:stdlib.h
伪随机数不是真正的随机数,rand()函数是对一个“种子”的基准值进行运算生成的随机数,因为默认种子是1,所以每次运行产生的随机数序列一样,是无法产生真正的随机数。
srand()
void srand(unsigned int seed);
如果要生成不同的随机数就要让种子变化。
srand()是用来初始化随机数的生成器。在调用rand()前调用srand(),通过srand()的seed参数来设置rand()函数生成随机数时的种子,只要种子变化,每次随机数序列就会变化。
time()
time_t time (time_t* timer);
time()函数会返回当前日历时间,返回的时1970-1-1-0-0到程序运行时间之间的差值,单位是秒。类型是time_t类型,32位或者64位的整型类型。要包含头文件:time.h
time()参数timer如果是非NULL的指针的话,函数会将这个返回的差值放在timer指向的内存中带回去。
timer是NULL时只会返回这个时间的差值,叫做:时间戳。
可写成:
time(NULL);
生成随机数的代码写成:
srand((unsignes int)time(NULL));//只需调用一次
//需要将time()转换为(unsigned int)类型
rand();
设置随机数的范围
0-99之间:
rand() % 100;
1-100之间:
rand() % 100 + 1;
生成a-b的范围:
a + rand()%(b - a + 1);
猜数字游戏实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void meun() {
printf("***********************\n");
printf("******* 1. play *******\n");
printf("******* 0. exit *******\n");
printf("***********************\n");
}
void game() {
//随机生成随机数
int r = rand() % 100 + 1;
int guess = 0;
int count = 6;
while (count) {
printf("还有%d次机会,请猜数字->",count);
scanf("%d", &guess);
if (guess < r) {
printf("猜小了!再猜猜\n");
}
else if(guess > r){
printf("猜大了!再猜猜\n");
}
else {
printf("恭喜你!对咯!\n");
break;
}
count--;
}
if (count == 0) {
printf("次数耗尽,失败咯,正确答案是%d",r);
}
}
int main() {
int input = 0;
//srand()设置种子
//以时间戳为种子,才可令随机数变化,只调用一次
srand((unsigned int)time(NULL));
meun();
do{
printf("请选择->");
scanf("%d", &input);
switch (input) {
case 0:
printf("游戏结束\n");
break;
case 1:
printf("准备好咯!猜数字游戏开始!\n");
game();
break;
default:
printf("输入错误再输一次吧");
break;
}
} while (input);
return 0;
}