猜随机数小游戏

猜数小游戏的关键在于生成随机数

rand是生成随机数的函数int rand(void)返回值为整形,无参数)头文件<stdlib.h>

RAND_MAX = 0x7fff(16进制) 换算成十进制的结果为32767,也就是rand生成的随机数的范围是在[0,32767]之间,但是使用rand函数会发现每次程序运行所生成的结果都是一样的
猜随机数小游戏_第1张图片

解决随机数每次都出现一样的问题

在使用rand函数之前需要使用srand函数去设置rang函数生成随机数

srand函数为设置随机起点,void srandnusigned int seed),头文件<stdlib.h>

srand需要整形,假设为srand(6);
结果:
猜随机数小游戏_第2张图片
程序单次运行的结果都是是一样的

可以看出srand函数的也需要一个随机数,rand函数才能随之生成随机数,rand函数生成的随机数又需要srand函数来设置随机起点,而srand函数设置随机起点又需要随机函数!#¥%&*@!¥%¥ ……

显然,这种方法行不通,套娃会陷入死循环
所以这里是使用时间戳

时间戳 = 当前计算机的时间 - 计算机的起始时间1970/01/01 00:00:00=(xxxx)秒 使用时间戳来作为srand函数的随机起点,就可以让srand函数生成随机起点(好像是废话)

time函数time_t time(time_t *timer),头文件<time.h>
time_t其实就是长整型

srand((unsigned int)time(NULL));

因为void srand(nusigned int seed)需要unsigned int参数,所以将time函数的值强制类型转换,转变成unsigned int,让srand的参数变成时间戳,srand就可以生成随机起点,rand随即生成随机数
猜随机数小游戏_第3张图片
猜随机数小游戏_第4张图片
至此随机数的生成问题解决了

#include
#include
#include
void menu()//定义menu函数
{
	printf("#################################\n");
	printf("#################################\n");
	printf("###  1. play         0. exit  ###\n");
	printf("#################################\n");
	printf("#################################\n");
}
//RAND_MAX  0x7fff-32767
void game()//定义game函数
{
	int ret = 0;//随机数
	int guess = 0;//猜数
	printf("猜数字游戏开始^-^\n");
	ret = rand() % 100 + 1;//生成随机数,rand取值范围[0,32767],模100再加上1后范围[1,100]
	//printf("%d\n", ret);//打印随机数
	while (1)//一直循环,直到最后else打印然后break跳出循环
	{
		scanf("%d", &guess);//输入猜数
		if (guess > ret)//如果猜数大于随机数
		{
			printf("猜大了,再试一次\n:>");//打印
		}
		else if (guess < ret)//如果猜数小于随机数
		{
			printf("猜小了,再试一次\n:>");//打印
		}
		else//否则
		{
			printf("恭喜你,猜对了 ^-^\n");//打印
			break;//并退出循环
		}
	}
}
int main()//主函数
{
	int x=0;//选择数字
	srand((unsigned int)time(NULL));//(unsigned int)强制类型转换,转换成srand需要的类型
	//主函数中调用,不用放在game函数中每次都使用
	//时间戳=当前计算机的时间减去计算机的起始时间1970/01/01 00:00:00=(xxxx)秒
	//用时间戳设置随机数的生成起点
	//time_t 本质上是长整型
	do//执行循环
	{
		menu();//menu函数
		printf("请输入数字选择:>");
		scanf("%d", &x);//输入数字选择
		switch (x)//1,play 2,exit
				 //switch选择语句从上往下执行遇到break跳出循环
		{
		case 1:
			game();//game函数
			break;//跳出
		case 0:
			printf("退出游戏");
			break;//跳出
		default:
			printf("输入错误,请重新输入\n");
			break;//跳出
		}
	} while (x);//非0即为真,当x属于case 1或default时x大于等于1,while继续循环。
				//当x等于0时则为假,while结束循环。
	return 0;
}

你可能感兴趣的:(c语言)