c语言写猜数字游戏

猜数字游戏想必大家都玩过吧,顾名思义,就是你说一个数字我来猜它,如果我猜大了,你就说猜大了,反之则说猜小了,如果猜对,那么游戏结束。这个猜数字的游戏实现起来相较于三子棋,扫雷之类的可简单太多了。先来看完整代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void meau()
{
	printf("******************\n");
	printf("****  1.play  ****\n");
	printf("****  0.exit  ****\n");
	printf("******************\n");
}
void game()
{
	int guess = 0;
	int num = rand() % 100 + 1;
	printf("%d", num);
	while (1)
	{
	son:
	con:
		printf("请猜一个数字\n");
		scanf("%d", &guess);
		if (guess < num)
		{
			printf("猜小了\n");
			goto con;
		}
		else if (guess > num)
		{
			printf("猜大了\n");
			goto son;
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		meau();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				printf("猜数字\n");
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("输入错误,请重新输入\n");
					break;
		}
	} while (input);
	return 0;
}

在main函数内的那些东西除了一个srand函数也没什么好讲的,你们看看就行了。
下面来看game函数
这里有个rand函数,rand()函数用于产生一个随机数,其内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。调用rand()函数会得到一个在0-RAND_MAX区间内的数。
c语言利用linear congruential generator作为生成器来生成一个伪随机数,而使用这个生成器就需要一个种子,如果只使用rand而不使用srand那么编译器会自动把这个种子默认为1,这时所生成随机数就都会是一样的,比如你生成了一个随机数996那么不管你以后运行多少次代码它生成的随机数都会是996.这时就需要使用srand来生成不断变化种子了,而这个种子在srand函数内通过又时间戳来设定,因为时间时一个不断变化的值。关于这个rand和srand函数更详细的内容你们想要看的话就自行上网解决吧。

void game()
{
	int guess = 0;
	int num = rand() % 100 + 1;
	printf("%d", num);
	while (1)
	{
	son:
	con:
		printf("请猜一个数字\n");
		scanf("%d", &guess);
		if (guess < num)
		{
			printf("猜小了\n");
			goto con;
		}
		else if (guess > num)
		{
			printf("猜大了\n");
			goto son;
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}
}

接下来就是几个if语句了,如果大了就说大,小了就说小,对了就结束。
我写的这个只是及其简单的一个,当然也有看起来更高级的,比如把scanf替换成getchar相比于scanf来说你们getchar应该使用的比较少吧?!或者给他增加一些难度,比如总共只能提示10次,并且输入20次还没能才对就判定为失败等等,在这里我就不演示更多了,完结撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值