C语言构建菜单界面


前言

因为目前在做一个智能手表,所以需要一个菜单界面去选择相应功能。想的是先用C语言实现,然后再加到嵌入式的代码里面,以下是我用纯C语言实现菜单界面的过程。

一、最开始的想法

while+switch实现
通过switch语句选择对应菜单,while做死循环,保证我程序不会结束

这种写法的适用场景:
比如你现在写了三个函数,这些函数都是顺序执行的,你想在运行时选择对应的函数执行,那这份菜单代码是可以满足需求的。
相关代码如下:

#include<stdio.h>
#include <windows.h>
int menu_select(void);
int menu_out;		//定义一个返回上一级菜单 
int main()
{
	while(1)
	{
		switch(menu_select())
		{
			case 1:
				//system("cls");
				menu_out=1;				
				printf("这是二级菜单1内部rn"); 
				/*
				在这里面写你自己想执行的功能函数
				*/
				printf("输入0返回上一级菜单:rn"); 
				while(menu_out)			//只有当键盘输入为0时,才退出当前菜单 
				scanf("%d",&menu_out); //否则一直循环获取键盘输入 
				break;
			case 2:
				//system("cls");
				menu_out=1;
				printf("这是二级菜单2内部rn");
				/*
				在这里面写你自己想执行的功能函数
				*/
				printf("输入0返回上一级菜单:rn"); 
				while(menu_out)
				scanf("%d",&menu_out);
				break;
			case 3:
				//system("cls");
				menu_out=1;
				printf("这是二级菜单3内部rn");
				/*
				在这里面写你自己想执行的功能函数
				*/
				printf("输入0返回上一级菜单:rn"); 
				while(menu_out)
				scanf("%d",&menu_out);
				break;
			default:break;
		}
	} 
	return 0;
}
int menu_select(void)
{
	int select;
	//system("cls");
	printf("输入对应标号进入下一级菜单:rn"); 
	printf("1、二级菜单1rn");
	printf("2、二级菜单2rn");
	printf("3、二级菜单3rn");
	scanf("%d",&select);
	return select;
}

system(“cls”);这个函数的作用是清屏,为了让大家直观的看到运行结果我把它注释掉了。
加上它会把之前的打印数据清除,也就是只会看到当前菜单的内容。

运行结果如图:
在这里插入图片描述
分析这中写法的不足,这样写的话,两级还是挺好写的,如果想再扩展菜单级数是很繁琐的一件事情,但思路简单。依然是while+switch的思路,真的贼麻烦。

总结一下,
这种写法优点:简单,容易理解,需要选择的功能不多的情况下非常适合使用
缺点:难以拓展,用这个方法写出的三级菜单代码丑到没法看(本人比较菜也是个因数)

二、新的想法

通过输入两个参数,想象成一个方阵,我分别输入行数与列数,从而确定执行对应的功能。其实总的思路和上面是一样的,但稍有改变的是,我前一次输入参数采用while语句判断,while判断进入不同的分组也就是二级菜单之后,在输入第二个参数,用swich判断第二个参数,从而实现执行三级菜单。对一些功能封装成了函数,看起来简洁不少,但也可以发现,确实比二级菜单麻烦很多

主函数代码如下: 源码我会在文末给出网盘链接

int main()
{
	
	while(1)
	{
		y=menu1_select();	
		while(y==1)
		{
			x=secmenu_select(y);
			if(!x)
			break; 
			switch(x)
				{
				case 1:
					//secmenu_select
					printf("函数1执行完成rn");
					menuout();
					break;
				case 2:
					//secmenu_select
					printf("函数2执行完成rn");
					menuout();
					break;
				case 3:
					//secmenu_select
					printf("函数3执行完成rn");
					menuout();
					break;
				default:break;
				}
		}
		while(y==2)
		{
			x=secmenu_select(y); 
			if(!x)
			break; 
			switch(x)
				{
				case 1:
					//secmenu_select
					printf("函数4执行完成rn");
					menuout();
					break;
				case 2:
					//secmenu_select
					printf("函数5执行完成rn");
					menuout();
					break;
				case 3:
					//secmenu_select
					printf("函数6执行完成rn");
					menuout();
					break;
				}
		}
		while(y==3)
		{
			x=secmenu_select(y); 
			if(!x)
			break; 
			switch(x)
				{
				case 1:
					//secmenu_select
					printf("函数7执行完成rn");
					menuout();
					break;
				case 2:
					//secmenu_select
					printf("函数8执行完成rn");
					menuout();
					break;
				case 3:
					//secmenu_select
					printf("函数9执行完成rn");
					menuout();
					break;
				default:break;
				}
		}
	}
	return 0;
}

代码运行结果如图:
一样的,我运行时注释掉了system(“cls”);方便大家观看效果
大家使用的时候一定要记得加上

在这里插入图片描述

总结

基本上就是这一些,用C语言确实挺不好写多级菜单界面的。用这种简单语句写到三级已经是我的极限了,再写四级菜单那肯定不好看,而且其中的逻辑关系很难掌握。但我查找资料的时候也看到有人用链表的方式写多级菜单,效果挺不错的。那就涉及到了数据结构等更高级的知识了,但目前来说,三级菜单对我已经够用了,所以没有深入,希望大家有兴趣的可以去探索。

对了,后续我会把这份代码在嵌入式里的应用也写一份博客的
如果对大家有帮助的话,麻烦点个赞呗
链接:https://pan.baidu.com/s/1FUGfxS1OfXihbWu3q2_HQQ
提取码:azqn

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>