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