猜数字游戏

游戏要求:1、生成1~100的数字。2、玩家猜数字,在猜数字的过程中,根据玩家填入的数字给出大了还是小了的提示,猜对游戏结束。在写猜数字游戏前我们还需有一些基础的知识储备。

1、rand函数

C语言提供了一个函数叫rand,它会随机生成一个数。rand函数会返回一个伪随机数,它的大小范围是从0~32767。使用rand函数需要包含头文件:stdlib.h
看如下代码:

#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函数随机返回的值,但我们会发现无论我们运行多少次我们得到的数都是一样的。如果深入了解我们会发现生成的不是随机值而是伪随机值,伪随机值和随机值有所不同,随机值是猜不到下一个生成的只是什么的,而伪随机值是通过某种算法生成的数值。rand()函数是对一个叫“种子”的基准值进行运算生成 的随机值。之所以上面的生成的数一直相同是因为rand()函数种子默认为1。想让数字不断变化我们就得让种子的数值不断变化。

2、srand函数

C语言又提供了一个函数叫srand,用来初始化随机数的生成器。程序在调用rand之前先调用srand函数,通过srand函数的参数seed来设置rand函数生成的随机数的时候的种子,只要种子在变化,随机值也就随机变化起来了。所以说srand函数的种子是随机的,而rand函数生成随机数,在生成随机数的时候还需要加入一个随机数这就产生矛盾了。在这个时候我们就会很困惑,我们怎么样生成一个随机值呢?

3、time

在程序中我们一般是使用时间作为种子,因为时间是一直改变的。在C语言中有一个函数叫做time。time会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回类型是time_t类型。time函数的这个时间差也被叫做:时间戳。使用time函数的时候需要包含头文件:time.h。接下来我们来看以下代码:

#include <stdio.h>
#include<stdlib.h>
#include<time.h>

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

	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());

	return 0;
}

在这里插入图片描述
在这里插入图片描述
由此程序运算结果可以看出,得出的数是随机值。

4、设置随机值的范围

我们要设置随机值的范围在1~100之间`:

rand() % 100 + 1;

由上述的代码我们可以得到随机数范围在1~100之间

5、猜数字游戏的实现

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

game()
{
	int num = 0;
	int r = rand() % 100 + 1;
	while(1)
	{ 
		printf("请输入你选择的数字:");
		scanf("%d", &num);
	
		if (num < r)
		{
			printf("猜小了!\n");
		}
		else if (num > r)
		{
			printf("猜大了!\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}

	}

}
void menu()
{
	printf("*******************\n");
	printf("*******1、play*****\n");
	printf("*******0、out *****\n");
	printf("*******************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));

	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &input);

		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束!\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}

	} while (input);

		return 0;
}

`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值