menu显示菜单和提供选择
这篇是教大家怎么用C语言来实现菜单功能。
先上代码:
//实现菜单功能
//一开始所有选项为一种颜色,使用方向键选择哪个选项就变另一种颜色,按Enter进入所选的选项进行所对应操作
#include <stdio.h>#define UP 0x001
#define DOWN 0x002
#define ENTER 0x003
#define UNKNOW 0x004int getSelect(void);int main(void)
{int key,loop=1;while(loop){//显示菜单 提供选择key=getSelect();switch(key){case 0:;break;case 3:loop=0;break;}}return 0;
}void showMuen(char *info[],int index)
{int i;system("clear"); for(i=0;info[i]!=NULL;i++){if(i==index){//被选中的printf("\033[44;37m%s\033[0m\n",info[i]);}else{printf("\033[47;30m%s\033[0m\n",info[i]);}}}
//方向键判断
int getInput(void)
{char ch;ch=getchar();if(ch=='\033' && getchar()=='['){switch(getchar()){case 'A':return UP;case 'B':return DOWN;}}else if(ch=='\n') return ENTER;return UNKNOW;
}
int getSelect(void)
{int key,loop=1;char *info[]={" 文 件 "," 编 辑 "," 搜 索 "," 退 出 ",NULL,};static int index=0;//记录被选中的选项system("stty -icanon");//关闭缓存system("stty -echo");//关闭回显while(loop){showMuen(info,index);key=getInput();switch(key){case UP :if(index>0) index--; break;case DOWN :if(info[index+1]!=NULL) index++;break;case ENTER:loop=0;break;}}system("stty icanon");//打开缓存system("stty echo");//打开回显return index;
}
首先,我们要知道printf函数除了单纯打印数据之外,还可以将字体和背景颜色的输出的.
.
格式如下:
printf("\033[字背景颜色;字体颜色m 字符串 \033[0m" );
.
上面代码中的例子:
printf("\033[44;37m%s\033[0m\n",info[i]);//被选中的
printf("\033[47;30m%s\033[0m\n",info[i]);//没选中的
颜色代码:
字背景颜色范围: 40–49 字颜色: 30—39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
.
ANSI控制码:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m – \033[37m 设置前景色
\033[40m – \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
现在开始讲函数:
首先是int getInput(void);函数,它是获取键盘方向键的上下和Enter,返回对应的值。
代码中进行三次getchar()函数获取字符,因为按一下方向键是输出3个字符的,所以要获取三次来判断是哪个按键,你们可以自己写代码测试测试
.
注意:测试时要关闭缓冲区,因为不这样的话还要按Enter才能输出。
下面我写好了我的测试代码:
#include <stdio.h>int main(void)
{ system("stty -icanon");//关闭缓冲区system("stty -echo");//关闭回显char a,b,c;a=getchar();b=getchar();c=getchar();printf("a:%c b:%c c:%c \n",a,b,c);system("stty icanon");//打开缓冲system("stty echo");//打开回显return 0;
}
接下来我们看函数void showMuen(char *info[],int index);
首先第一个参数是指针数组,存放着要显示的字符串首地址,第二个参数是你经上下按键选中的选项,跟选中和没选择输出字符串带不同中颜色显示;
然后是函数int getSelect(void);其实就是结合上面两个函数实现菜单功能,按Enter键退出函数,返回对应的值,而主函数按照返回的值进行所对应的操作,大概就是这样。
全篇完。
本人博客仅仅代表我个人见解方便记录成长笔记。
若有与 看官老爷见解有冲突,我坚信看官老爷见解是对的,我的是错的。
感谢~!
menu显示菜单和提供选择相关推荐
- 黄页前台联动菜单修改时不能显示,要重新选择|没样式
黄页前台联动菜单修改时不能显示,要重新选择http://bbs.phpcms.cn/thread-455706-1-1.html 修改 phpcms\libs\functions\global.fun ...
- ant vue 树形菜单横向显示_ant design vue menu 导航菜单
ant design vue menu 导航菜单 ant design vue menu 导航菜单是一个网站或者系统的重要功能,通过导航可以对网站或者系统的功能进行分门别类. 水平导航菜单 例子 首页 ...
- vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单
vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...
- Android开发:Menu选项菜单
创建选项菜单的步骤: 1.覆盖Activity的onCreateOptionsMenu(Menu menu)函数 2.调用menu的add()方法添加菜单项(MenuItem),调用MenuItem的 ...
- 使用Power Apps实现SharePoint Online列表的下拉菜单的级联选择
在SharePoint列表中添加数据的时候,下拉菜单的级联选择一直是一个非常实用的功能,尤其是有很多数据的情况,级联选择可以根据上一层的选择,自动过滤下一层的选择,方便用户查找和选择准确的信息.一个最 ...
- android qml 菜单,QML - ListView项目,用于显示菜单
当用户点击项目时,我正在寻找关于在列表项目下显示菜单的一些提示和指示 . 如果我有这样的ListModel: ListModel { ListElement { name: "Bill Sm ...
- java 前台播放视频_「纯js项目」海康视频项目,java后台+前台web显示的,望提供思路!...
纯js项目: 海康视频项目,java后台+前台web显示的,望提供思路! 如果只是实现BS架构,可以向海康要web开发包,直接使用浏览器通过ocx访问海康设备浏览视频,如果需要的功能不全,再使用JNI ...
- Android记录23-关于actionbar中overflow menu(溢出菜单)中的一些问题
Android记录23-关于actionbar中overflow menu(溢出菜单)中的一些问题 前言 本篇博客记录一下小巫在使用actionbar的时候遇到关于溢出菜单的一些问题: 什么是Over ...
- Android ActionBar中Overflow Menu(溢出菜单)中的一些问题
关注微信号:javalearns 随时随地学Java 或扫一扫 随时随地学Java 前言 开始前我们先来关注一下Android Overflow menu的几个相关问题: 什么是Overflow ...
最新文章
- Flask中的重定向redirect和url_for
- java getcolormodel_Java ColorModel.getTransparency方法代碼示例
- Shader Compilation for Multiple Platforms
- windows server2008R2 64位 配置 mysql-8.0.15-winx64
- CSP认证201703-3	Markdown[C++题解]:字符串处理、模拟
- Java简单知识梳理
- 编写自适应高度的 textarea
- 爱国者首款手机正式上市 零售价不超2000元
- 视频会议系统OpenMeetings v5.1.0源码
- linux组合键 发送指定信号_linux trap脚本信号捕获命令的使用
- PHP5安装好了,再附加GD库
- 大数据BI系统如何做数据采集
- eviews建立时间序列模型_Eviews系列12|时间序列模型常见问题解答
- python dbf导入到sql_python读写dbf数据库
- Eclipse ADT插件和Android SDK使用离线包升级笔记
- 基于STM32-消防栓监测系统毕业设计---论文(附加最全面的从硬件电路设计->驱动程序设计->阿里云物联网搭建->安卓APP设计)
- VMWare安装Kali Linux(4-4)
- Java集合框架笔记记录 --- 原创@余胜军 但有个人心得
- 香港银行开户资料和香港银行开户多少钱和渣打银行开户流程
- JSX语法学习(一)