menu显示菜单和提供选择

这篇是教大家怎么用C语言来实现菜单功能。

先上代码:

//实现菜单功能 
//一开始所有选项为一种颜色,使用方向键选择哪个选项就变另一种颜色,按Enter进入所选的选项进行所对应操作
#include 

#define     UP       0x001
#define     DOWN     0x002
#define     ENTER    0x003
#define     UNKNOW   0x004

int 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 

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键退出函数,返回对应的值,而主函数按照返回的值进行所对应的操作,大概就是这样。

全篇完。

本人博客仅仅代表我个人见解方便记录成长笔记。

若有与 看官老爷见解有冲突,我坚信看官老爷见解是对的,我的是错的。

感谢~!

你可能感兴趣的:(C语言笔记,C语言)