猜数字游戏集总C语言分支循环知识

前言

(声明一下,凡人小严初学C语言,概念性的内容就不细说啦,还是注重实践理解)

猜数字
规则:系统随机生成一个1~100的数字,玩家每次输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。

要求一:做出规则界面,输入数字‘0’进入游戏菜单界面。
要求二:游戏菜单界面,输入数字‘1’开始游戏;输入数字‘2’进入模式选择;输入数字‘3’退出游戏。
要求三:模式选择分为两种,第一种无限输入次数,第二种自定义输入次数。
要求四:进入游戏后,需要添加输入数字‘999’强制退出游戏。
要求五:若玩家输入数字不在区间内,提示玩家。
要求六:尽可能多的提示玩家下一步操作

注意:以下分布只展示部分代码,均为截取,文章结尾为完整代码及注释。

第一步:int main()return 0 起步喽

首先,主函数,我们肯定要先完成要求一。利用printf函数打印出规则界面和下一步操作,再利用scanf函数储存输入数据。

int input = 0;

printf("******猜数字******\n");

printf("介绍:\n系统将随机生成一个1~100的数字,请输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。\n");

printf("输入 0 进入菜单\n");

scanf("%d", &input);

第二步:做出菜单界面

这里,我们为了简化主函数,我们就可以简单地利用子函数。于是,我们引入子函数menu()打印菜单(之后的游戏程序也相同)。为了进入不同界面,这里,我们就可以利用Switch函数判断输入数据来完成。

void menu()

{

	printf("请输入对应序号进入\n");

	printf("******1.开始******\n");

	printf("****2.模式设置****\n");

	printf("******3.退出******\n");

}
switch (input)

{

case 0:
	menu();
	case 1:
	game();

case 2:

	printf("请输入模式序号\n");

	printf("11:无限输入次数(系统默认)\n");

	printf("22:自定义输入次数\n");

	scanf("%d", &flat);

	break;

case 3:

	printf("游戏已关闭\n");
	break;

default:

	printf("输入错误,请重新输入\n");

原本是想把模式界面也分隔出去,但不明确子函数menu()是否能创建多个,所以,就直接在case 2:下编写。

第三步:编写跳转语句

现在就涉及到一个问题了,打印完菜单以及选择完模式后,我们如何跳转回初始游戏菜单界面。这里,我选择使用goto语句,构建多个定义跳转点。

int main()

{

	int input = 0;

	printf("******猜数字******\n");

	printf("介绍:\n系统将随机生成一个1~100的数字,请输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。\n");

	printf("输入 0 进入菜单\n");

again:
	scanf("%d", &input);

	switch (input)

	{

	case 0:

	agains:

		menu();
		goto again;

	case 1:
		game();
		goto agains;

	case 2:

		printf("请输入模式序号\n");

		printf("11:无限输入次数(系统默认)\n");

		printf("22:自定义输入次数\n");

		scanf("%d", &flat);

		goto agains;
		break;

	case 3:

		printf("游戏已关闭\n");
		break;

	default:

		printf("输入错误,请重新输入\n");
		goto again;

	}

	return 0;

}

到这里我们就完成了主函数的编写,完成了要求一和要求二。

第四步:编写game()

既然是猜数字游戏,那么,每一次的游戏开始,系统都要随机生成一个玩家无法预测的数字。这里,我们首先先引入rand()函数,随机生成数字。简单编一个(非猜数字内)。

#define _CRT_SECURE_NO_WARNINGS 1

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

int main()
{
	int i = 0;
	for (i = 1; i < 10; i++)
	{
		int num = rand() % 100 + 1;
		printf("%d\n", num);

	}
	

	return 0;

}

在这里插入图片描述
在这里插入图片描述
这里我们可以看到,两次运行代码,随机生成的数字没有变化。
这是因为rand()生成不同的数字依赖于srand()函数,srand()函数内种子取值不同可使rand()生成数改变。为了能让rand()随时改变,我们就可以将种子取值与时间关联,这样随机数就可以一直改变了。

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

int num = rand() % 100 + 1;

准备工作搞定,现在就是简单的输入数字,让系统判断输入值与随机值大小了并完成要求五。
我们利用while语句,if语句,else语句,break语句完成

	while (scanf("%d", &a) != EOF)

	{
		
		if (a > num)
		{
			if (a > 100)
			{
				printf("您输入的数字超过系统最大随机值\n");
				printf("请重新输入\n");
			}
			else
			printf("您输的数字比随机数大\n");
		}

			

		else if (a < num)
		{
			if (a < 0)
			{
				printf("您输入的数字低于系统最小随机值\n");
				printf("请重新输入\n");
			}
			else
			printf("您输的数字比随机数小\n");
		}
			
		else
			break;

	}

}

接下来,对自定义输入次数模式进行编写。与上文类似。

	int count = 0;

	printf("请输入您想限制的次数\n");

	printf("请注意:0<= count <= 100\n");

	scanf("%d", &count);

	while (scanf("%d", &a) != EOF)

	{
	

		if (count == 0)

		{

			d = 0;

			break;

		}

		if (a > num)

		{

			if (a > 100)
			{
				printf("您输入的数字超过系统最大随机值\n");
				printf("请重新输入\n");
			}
			else
				printf("您输的数字比随机数大\n");

			count--;

		}

		else if (a < num)

		{

			if (a < 0)
			{
				printf("您输入的数字低于系统最小随机值\n");
				printf("请重新输入\n");
			}
			else
				printf("您输的数字比随机数小\n");

			count--;

		}

		else
			break;

	}

}

第五步:编写模式选择程序

因为,无限输入次数模式为系统默认,我们就可以定义一个全局变量int flat = 11。我们上文在case 2:已经编写了 flat 变量的输入值,因此结合if语句我们就可以实现模式的更换了。

if (flat == 11)
{
无限输入次数模式
}

else if(flat == 22//注意不要把“=”当成等于了
{
自定义输入次数模式
}

完成要求三

第六步:游戏进行时强制退出

既然,游戏进行时,那么我们正在输入数字,便可利用一个特殊数字组合结合if语句和goto语句完成强制退出的执行。

if (flat == 11)

{

	while (scanf("%d", &a) != EOF)

	{
		if (a == 999)
			goto againt;
		if (a > num)
		{
			if (a > 100)
			{
				printf("您输入的数字超过系统最大随机值\n");
				printf("请重新输入\n");
			}
			else
			printf("您输的数字比随机数大\n");
		}

			

		else if (a < num)
		{
			if (a < 0)
			{
				printf("您输入的数字低于系统最小随机值\n");
				printf("请重新输入\n");
			}
			else
			printf("您输的数字比随机数小\n");
		}
			
		else
			break;

	}

}



else if (flat == 22)

{

	int count = 0;

	printf("请输入您想限制的次数\n");

	printf("请注意:0<= count <= 100\n");

	scanf("%d", &count);

	printf("游戏继续\n");

	while (scanf("%d", &a) != EOF)

	{
		if (a == 999)
			goto againt;

		if (count == 0)

		{

			d = 0;

			break;

		}

		if (a > num)

		{

			if (a > 100)
			{
				printf("您输入的数字超过系统最大随机值\n");
				printf("请重新输入\n");
			}
			else
				printf("您输的数字比随机数大\n");

			count--;

		}

		else if (a < num)

		{

			if (a < 0)
			{
				printf("您输入的数字低于系统最小随机值\n");
				printf("请重新输入\n");
			}
			else
				printf("您输的数字比随机数小\n");

			count--;

		}

		else
			break;

	}

}
	if (d == 1)
	{
		printf("恭喜你猜中了\n");
		goto againr;
	}
	else if (d == 0)
	{
		printf("很遗憾,您没有机会了\n");
		goto againr;
	}
againt:
	printf("游戏已经强制退出\n");
againr:
	;
}

至此,我们就完成了所有要求了。

本游戏主要以if语句、else语句,while语句、Switch语句,break语句、goto语句完成。
美中不足就是没有结合continue语句。
ok,以上便是我想表达的C语言分支循环知识。
我的想法是通过分支循环能够完成一些简单的模式跳转选择吧。
下面是代码及注释

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<stdlib.h>

#include <time.h>

int flat = 11;//定义全局变量来完成默认游戏模式

void menu()//利用menu()函数编写游戏菜单界面,同时简化主函数,以达到分块编写代码

{

	printf("请输入对应序号进入\n");

	printf("******1.开始******\n");

	printf("****2.模式设置****\n");

	printf("******3.退出******\n");

}



void game()//利用game()函数编写游戏系统

{

	printf("游戏已开始\n");
	printf("若要强制退出,请输入999\n");



	srand((unsigned int)time(NULL));//利用时间完成srand()函数种子的持续改变

	int num = rand() % 100 + 1;

	int a = 0;

	int d = 1;//定义变量决定无限输入次数模式和自定义模式游戏结束标语

	if (flat == 11)//若flat为11,游戏模式为无限输入次数模式

	{

		while (scanf("%d", &a) != EOF)

		{
			if (a == 999)
				goto againt;//输入999直接跳转到game()函数末结束游戏
			if (a > num)
			{
				if (a > 100)
				{
					printf("您输入的数字超过系统最大随机值\n");
					printf("请重新输入\n");
				}
				else
				printf("您输的数字比随机数大\n");
			}

				

			else if (a < num)
			{
				if (a < 0)
				{
					printf("您输入的数字低于系统最小随机值\n");
					printf("请重新输入\n");
				}
				else
				printf("您输的数字比随机数小\n");
			}
				
			else
				break;

		}

	}



	else if (flat == 22)//若flat为22,模式切换到自定义输入次数模式

	{

		int count = 0;

		printf("请输入您想限制的次数\n");

		printf("请注意:0<= count <= 100\n");

		scanf("%d", &count);

		printf("游戏继续\n");

		while (scanf("%d", &a) != EOF)

		{
			if (a == 999)
				goto againt;//输入999跳转到game()函数末结束游戏

			if (count == 0)

			{

				d = 0;//改变变量b的值,执行自定义输入次数结束标语

				break;

			}

			if (a > num)

			{

				if (a > 100)
				{
					printf("您输入的数字超过系统最大随机值\n");
					printf("请重新输入\n");
				}
				else
					printf("您输的数字比随机数大\n");

				count--;

			}

			else if (a < num)

			{

				if (a < 0)
				{
					printf("您输入的数字低于系统最小随机值\n");
					printf("请重新输入\n");
				}
				else
					printf("您输的数字比随机数小\n");

				count--;

			}

			else
				break;

		}

	}

	if (d == 1)
	{
		printf("恭喜你猜中了\n");
		goto againr;//为防止不同标语一起打印,使用goto语句进行跳过
	}
	else if (d == 0)
	{
		printf("很遗憾,您没有机会了\n");
		goto againr;
	}
againt://强制退出游戏标语跳转点
	printf("游戏已经强制退出\n");
againr://防止标语一起打印跳转点
	;
}



int main()

{

	int input = 0;

	printf("******猜数字******\n");

	printf("介绍:\n系统将随机生成一个1~100的数字,请输入一个在此区间的数字,系统会自动判断您输入的输与随机数的大小。\n");

	printf("输入 0 进入菜单\n");

again://菜单打印后进行选择跳转点
	scanf("%d", &input);

	switch (input)

	{

	case 0:

	agains://模式修改后回弹菜单界面点 兼 游戏结束跳转菜单界面点

		menu();
		goto again;

	case 1:
		game();
		goto agains;

	case 2:

		printf("请输入模式序号\n");

		printf("11:无限输入次数(系统默认)\n");

		printf("22:自定义输入次数\n");

		scanf("%d", &flat);

		goto agains;
		break;

	case 3:

		printf("游戏已关闭\n");
		break;

	default:

		printf("输入错误,请重新输入\n");
		goto again;

	}

	return 0;

}
  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值