0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享一个常用的终端菜单系统

冬至子 来源:技术铺子 作者:chasenzhang 2023-01-18 12:43 次阅读

嵌入式开发中,因为只有黑框框的终端,所以在终端输入指令是比较麻烦的,每次都需要重新实现解析字符串。

本篇文章分享一个自己常用的一套终端菜单系统。

代码如下:

#include 
#include 
#include 


typedef enum CmdType
{
    CMD1, CMD2, CMD3, CMD4, CMD5, QUIT
}CmdType;


typedef struct CmdList
{
    CmdType type;
    unsigned char info[50];
}CmdList;


CmdList g_cmd_list[] =
{
    {CMD1, "run cmd1"},
    {CMD2, "run cmd2"},
    {CMD3, "run cmd3"},
    {CMD4, "run cmd4"},
    {CMD5, "run cmd5"},
    {QUIT, "to quit"},
};


void printf_cmd_str()
{
    int size = sizeof(g_cmd_list) / sizeof(g_cmd_list[0]);
    printf("support cmd:\\n");
    for (int i = 0; i < size; i++) {
        printf("    .%d-->%s\\n", i, g_cmd_list[i].info);
    }
    printf("eg. you can input \".0\" to run this cmd.\\n");
}


int main(int argc, char *argv[])
{
    int cmd_size = sizeof(g_cmd_list) / sizeof(g_cmd_list[0]);
    while (1) {
        printf_cmd_str();
        char data[20] = {0};
        if (fgets(data, 20, stdin) < 0) {
            printf("fgets error\\n");
            continue;
        }
        if (data[0] == '.') {
            int id = atoi(&data[1]);
            if (id >= cmd_size || id < 0) {
                printf("input err\\n");
                continue;
            }
            int cmd = g_cmd_list[id].type;
            if (cmd == CMD1) {
                printf("run cmd1\\n");
            }
            else if (cmd == CMD2) {
                printf("run cmd2\\n");
            }
            else if (cmd == CMD3) {
                printf("run cmd3\\n");
            }
            else if (cmd == CMD4) {
                printf("run cmd4\\n");
            }
            else if (cmd == CMD5) {
                printf("run cmd5\\n");
            }
            else if (cmd == QUIT) {
                printf("to quit\\n");
                break;
            }
            else {
                printf("this cmd is not supported\\n");
            }
        }
        else {
            printf("input invalid\\n");
        }
    }


    return 0;
}

运行结果如下:

****@****:~/zcl$ ./a.out 
support cmd:
    .0-->run cmd1
    .1-->run cmd2
    .2-->run cmd3
    .3-->run cmd4
    .4-->run cmd5
    .5-->to quit
eg. you can input ".0" to run this cmd.
.0
run cmd1
support cmd:
    .0-->run cmd1
    .1-->run cmd2
    .2-->run cmd3
    .3-->run cmd4
    .4-->run cmd5
    .5-->to quit
eg. you can input ".0" to run this cmd.
.5
to quit
****@****:~/zcl$

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5065

    文章

    18997

    浏览量

    302622
  • CMDB
    +关注

    关注

    0

    文章

    7

    浏览量

    6736
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21610
收藏 人收藏

    评论

    相关推荐

    【申精】【转帖】占用内存极少的菜单系统的实现

    LCD上直接使用这份代码为什么公布这份代码,使用的话需要授权什么的么? 文件目录:1. MenuSampleCode目录是代码这份代码我在我的硬件上测试过。2.说明文档是:占用内存极少的菜单系统
    发表于 01-22 15:53

    基于VS2010单列树形结构文本菜单系统设计

    在公司闲着,于是写了菜单系统。这个菜单系统不是很复杂的,功能简单。总共300多行代码。实现1~255级和1~255相目录显示。这里放在VS上实现,主要是便于调试,其实它主要用于带普
    发表于 07-31 14:58

    深联华单片机实现菜单系统

    在各类仪器仪表的设计中,常常需要透过液晶和键盘来实现人机交互,当整个系统需要管理的内容较多的时候,如何透过键盘和液晶实现有效管理便是问题。通常软件的设计者会设计
    发表于 10-31 09:16

    Ubuntu终端常用的快捷键

    Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住些快捷键的操作更得心应手。在Ubuntu中打开终端的快捷键是Ctrl+Alt+T。其他的
    发表于 10-28 13:47

    STC15单片机驱动5寸屏幕做多级菜单显示,用什么屏幕比较好?

    最近在做一个项目,想用STC15来写多级菜单系统,显示在5寸屏幕上。 1、请问各位朋友,选择哪种屏幕比较好?请各位推荐几块屏幕,不胜感激! 2、还有就是做多级
    发表于 10-07 07:33

    9优秀的开源工单系统,你知道几个

    单系统(也称为问题跟踪系统,故障工单系统,支持工单或事件工单系统)是计算机软件包或基于We
    发表于 06-17 04:10 2.5w次阅读
    9<b class='flag-5'>个</b>优秀的开源工<b class='flag-5'>单系统</b>,你知道几个

    多级操作菜单显示系统设计

    本文旨在提供轻量级的单片机多级菜单实现方法,以较少的系统资源消耗和简单方便的方法完成菜单设计。考虑到
    发表于 03-26 15:07 7369次阅读
    多级操作<b class='flag-5'>菜单</b>显示<b class='flag-5'>系统</b>设计

    Visual FoxPro使用教程之菜单设计与建立应用程序系统

    菜单是应用程序的重要组成部分,VFP中可以通过以往的常规程序设计方法,直接编写代码进行菜单设计,但通过VFP提供的菜单设计器,可以更为方
    发表于 09-20 11:42 0次下载
    Visual FoxPro使用教程之<b class='flag-5'>菜单</b>设计与建立应用程序<b class='flag-5'>系统</b>

    英创信息技术ARM9 Linux智能终端菜单界面设计介绍

    、LCD128x64、LCD160x160等。在实际应用中有许多对于菜单界面操作的需求,需要客户根据应用的具体要求自行构建菜单显示界面,本文将重点介绍这方面的内容。
    的头像 发表于 11-18 10:04 1302次阅读
    英创信息技术ARM9 Linux智能<b class='flag-5'>终端菜单</b>界面设计介绍

    linux系统中如何创建文本菜单

    当使用Linux系统时,最常见的Shell脚本交互类型是应用菜单(文本菜单),文本菜单的核心是case命令。 H. L.使用case命令完成菜单
    发表于 09-25 15:45 1140次阅读

    AVR期末 自选设计 菜单系统多功能使用

    Avr自选设计实践内容,综合各个功能模块设计基于菜单的实践作品。1)基本内容:设计菜单系统(lcd显示菜单,或者数码管显示菜单编号),menu0实现具有校准功能的时钟
    发表于 11-15 18:51 6次下载
    AVR期末    自选设计 <b class='flag-5'>菜单系统</b>多功能使用

    带LCD的简单Arduino菜单

    电子发烧友网站提供《带LCD的简单Arduino菜单.zip》资料免费下载
    发表于 11-15 14:38 1次下载
    <b class='flag-5'>一</b><b class='flag-5'>个</b>带LCD的简单Arduino<b class='flag-5'>菜单</b>

    基于Arduino UNO的编码器菜单系统

    、编码器两针脚、内置按钮针脚该函数控制轮次计数,菜单控制器将此计数传递给变量。当用户单击按钮时,计数器重置为 0。还有更简单更好的方法来控制变量。您可以使用方向变量(dir)。我
    发表于 12-20 16:00 0次下载

    简单的菜单系统配置开源设计

    电子发烧友网站提供《简单的菜单系统配置开源设计.zip》资料免费下载
    发表于 06-09 10:31 0次下载
    简单的<b class='flag-5'>菜单系统</b>配置开源设计

    会议体机单系统与双系统的区别在哪里?怎么选择

    体机通常具有更简单的设计,仅配备操作系统和应用程序,这种体机通常更加可靠和易于维护。此外,单系统一体机价格上更便宜,适合只需要基本会议
    的头像 发表于 11-02 14:40 1352次阅读