C语言实现猜数字游戏

猜数字游戏与简单登录操作类似。可以让电脑生成一个随机数,可以通过取模操作来控制这个随机数的范围,然后我们输入一个数与这个随机数比较即可。

生成一个随机数的操作可以用 <stdlib.h>头文件中的srand函数:
在这里插入图片描述
在使用之前需要给srand函数传入一个无符号整形的数,它会根据这个数生成一个随机数生成随机数rand();但是很遗憾,每次生成的随机数都是一样的:

第一次:
在这里插入图片描述
第二次:
在这里插入图片描述

为了避免这种情况,我们需要在srand中传入一个随机数,而这个随机数可以用时间戳:
在这里插入图片描述

时间戳是当前计算机的时间减去计算机的起始时间(1970年1月1日0时0分0秒),因此这个值是时刻变化的,因此用这个时间戳生成的随机数也是变化的,在MSDN的srand函数举例中就出现了时间戳:
在这里插入图片描述
time函数:在这里插入图片描述

要使用time函数要引用头文件<time.h>,传入一个time_t的指针,在这里传入空指针NULL即可,它的返回值time_t是一个长整型,这个可以从定义中得知:
在这里插入图片描述
在这里插入图片描述
而srand中的参数是一个无符号整形,因此我们需要进行强制类型转换,修改后的代码:
在这里插入图片描述
在这里插入图片描述

两次产生的随机数不同,随机数的生成就解决了,如果要得到固定范围比如1-100,只需要用产生的随机数取模与100然后加1即可。

最难的随机数解决完以后,剩下的就是用while循环和switch选择结构来搭建游戏框架了,具体的代码比较简单:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()//将菜单封装成函数
{
	printf("**********************************\n");
	printf("*********** 1.开始****************\n");
	printf("*********** 0.退出****************\n");
	printf("**********************************\n");
}

void game()//游戏实现的程序
{
	int num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d", &input);
		if (input > num)
		{
			printf("猜大了\n");
		}
		else if (input < num)
		{
			printf("猜小了\n");
		}

		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);//输入玩游戏或者退出游戏的选项
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

在这里插入图片描述

在猜对了之后加入<stdlib.h>中的两个函数按任意键继续system(“pause”)和清屏system(“cls”),可以让体验更好:在这里插入图片描述
按任意键后:
在这里插入图片描述

如果想实现最多猜多少次的操作,可以在while循环中加入一个计数变量,当达到指定次数后直接跳出循环,以最多猜测五次为例:
在这里插入图片描述

最终的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
	printf("**********************************\n");
	printf("*********** 1.开始****************\n");
	printf("*********** 0.退出****************\n");
	printf("**********************************\n");
}

void game()
{
	int num = rand() % 100 + 1;
	int input = 0;
	int count=0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d", &input);
		if (input > num)
		{
	
			printf("猜大了\n");
			count++;

		}
		else if (input < num)
		{
			
			printf("猜小了\n");
			count++;
	
		}
		else
		{
			printf("恭喜你,猜对了\n");
			system("pause");
			system("cls");
			break;
		}
		if (count == 5)
		{
			printf("猜测次数用完,游戏失败\n");
			system("pause");
			system("cls");
			break;

		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也要写bug、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值