这篇是教大家怎么用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显示菜单和提供选择相关推荐

  1. 黄页前台联动菜单修改时不能显示,要重新选择|没样式

    黄页前台联动菜单修改时不能显示,要重新选择http://bbs.phpcms.cn/thread-455706-1-1.html 修改 phpcms\libs\functions\global.fun ...

  2. ant vue 树形菜单横向显示_ant design vue menu 导航菜单

    ant design vue menu 导航菜单 ant design vue menu 导航菜单是一个网站或者系统的重要功能,通过导航可以对网站或者系统的功能进行分门别类. 水平导航菜单 例子 首页 ...

  3. vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单

    vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...

  4. Android开发:Menu选项菜单

    创建选项菜单的步骤: 1.覆盖Activity的onCreateOptionsMenu(Menu menu)函数 2.调用menu的add()方法添加菜单项(MenuItem),调用MenuItem的 ...

  5. 使用Power Apps实现SharePoint Online列表的下拉菜单的级联选择

    在SharePoint列表中添加数据的时候,下拉菜单的级联选择一直是一个非常实用的功能,尤其是有很多数据的情况,级联选择可以根据上一层的选择,自动过滤下一层的选择,方便用户查找和选择准确的信息.一个最 ...

  6. android qml 菜单,QML - ListView项目,用于显示菜单

    当用户点击项目时,我正在寻找关于在列表项目下显示菜单的一些提示和指示 . 如果我有这样的ListModel: ListModel { ListElement { name: "Bill Sm ...

  7. java 前台播放视频_「纯js项目」海康视频项目,java后台+前台web显示的,望提供思路!...

    纯js项目: 海康视频项目,java后台+前台web显示的,望提供思路! 如果只是实现BS架构,可以向海康要web开发包,直接使用浏览器通过ocx访问海康设备浏览视频,如果需要的功能不全,再使用JNI ...

  8. Android记录23-关于actionbar中overflow menu(溢出菜单)中的一些问题

    Android记录23-关于actionbar中overflow menu(溢出菜单)中的一些问题 前言 本篇博客记录一下小巫在使用actionbar的时候遇到关于溢出菜单的一些问题: 什么是Over ...

  9. Android ActionBar中Overflow Menu(溢出菜单)中的一些问题

    关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java 前言 开始前我们先来关注一下Android Overflow menu的几个相关问题: 什么是Overflow ...

最新文章

  1. Flask中的重定向redirect和url_for
  2. java getcolormodel_Java ColorModel.getTransparency方法代碼示例
  3. Shader Compilation for Multiple Platforms
  4. windows server2008R2 64位 配置 mysql-8.0.15-winx64
  5. CSP认证201703-3 Markdown[C++题解]:字符串处理、模拟
  6. Java简单知识梳理
  7. 编写自适应高度的 textarea
  8. 爱国者首款手机正式上市 零售价不超2000元
  9. 视频会议系统OpenMeetings v5.1.0源码
  10. linux组合键 发送指定信号_linux trap脚本信号捕获命令的使用
  11. PHP5安装好了,再附加GD库
  12. 大数据BI系统如何做数据采集
  13. eviews建立时间序列模型_Eviews系列12|时间序列模型常见问题解答
  14. python dbf导入到sql_python读写dbf数据库
  15. Eclipse ADT插件和Android SDK使用离线包升级笔记
  16. 基于STM32-消防栓监测系统毕业设计---论文(附加最全面的从硬件电路设计->驱动程序设计->阿里云物联网搭建->安卓APP设计)
  17. VMWare安装Kali Linux(4-4)
  18. Java集合框架笔记记录 --- 原创@余胜军 但有个人心得
  19. 香港银行开户资料和香港银行开户多少钱和渣打银行开户流程
  20. JSX语法学习(一)

热门文章

  1. linux dns 53端口,[已解决]dnscrypt-proxy无法在53端口正常工作
  2. CRC 在线计算工具
  3. laravel 在nginx环境中报错404
  4. 从“月饼现象”谈吉利转型
  5. TryHackMe-Wreath [网络杀伤链](windows网络)渗透测试
  6. 【Web安全】几款web安全查杀工具
  7. 白翔:复杂开放场景中的文本理解
  8. 如何将阿里云盘变成本地硬盘
  9. A - Learning Languages
  10. E. Physical Education Lessons