分支与循环(下)→猜数字小游戏实现

前面我们讲了有关分支与循环的内容,可以由此看→
  http://t.csdnimg.cn/yxTwh                                                                 今天我们就由此些知识来实现个小游戏                                 0199849a8e2240f0ae7677fd6a59c94e.jpg

首先我们先要了解该游戏所需要的几个函数:

rand()函数:  可以生成伪随机数(多次程序运行结果一致)→rand函数是以一个叫“种子”的基准值生成函数,而rand函数生成随机数的默认种子为1(导致多次程序运行结果一致的原因→导致生成伪随机数)→所以要生成不同的随机数,应该让种子是变化的                        生成随机数范围:0~RAND_MAX(32767→跟编译器有关)之间   

srand()函数:  用来初始化随机数的生成器的——变化rand的种子 (不是给种子一个随机数→那就是以一个随机数来生成一个随机数了) →所以当srand()里的参数值为1时,rand种子仍然是1;变成2,rand的种子值就改变——所以当使参数值一直变时(如time函数) ,rand的种子就会一直变                                                                     srand函数的原型如下:

void srand(unsigned int seed);

通过参数seed来设置rand的种子

 使用rand()和srand()应包含头文件<stdlib.h>                      srand函数生成的种子在整个程序只能执行一次(不然生成的随机数会很相近甚至相同)

time()函数: 一般用程序生成的时间作为rand的种子(因为时间时刻在发生变化),time函数就可以获得这个时间    →→         time函数会返回一个时间戳(时间戳:1970.1.1.0.0到现在程序运行时间(即现在日期)之间的差值(单位是秒)→所以是时刻变化的) time函数原型: time_t time(time_t* timer); 返回类型为 time_t 类型,其实本质上为整形类型 如果只返回时间戳,应写为:                       time(NULL);          (NULL是空指针,应注意为大写)              使用time()应包含头文件<time.h>     

综上所述,生成可变的rand的种子应该写上:

srand(unsigned int time(NULL));

注意:这个srand函数在整个程序只能执行一次            其中的NULL为空指针                

附加:如果要要生成a~b之间的随机数→公式a+rand()%(b-a+1)

依照这三个函数我们就可以进行游戏的编写,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//void rand()    rand()为  int_cdecl rand(void)
void game()
{
	int a = 0;
	int b = 0;
	a = rand()%100 + 1;
//	do
	while (1)
	{
		printf("请输入你的猜测值:");
		scanf_s("%d", &b);
		if (b > a)
			printf("猜大了\n");
		else if (b < a)
			printf("猜小了\n");
		else
		{
			printf("恭喜你,猜对了");
			break;
		}
	}
//	} while (b);          //当判断条件为b时,像输入0这种情况就会出错
}
void  begin()
{
	printf("******************\n");
		printf("****1:开始游戏****\n");
		printf("****0:退出游戏****\n");
		printf("******************\n");
}



int main()
{
	int i = 0;
	srand((unsigned int)time(NULL));
	do {
		begin();                       
		scanf_s("%d", &i);
		if (i == 1)
			game();           
		else if (i == 0)
			break;
		else
			printf("输入错误");
	} while (1);
	return 0;
}

欧克,今天的文章到这就结束了,希望能帮到大家    (˵¯͒〰¯͒˵)(˃ ⌑ ˂ഃ )(˃ ⌑ ˂ഃ )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值