在嵌入式開(kāi)發(fā)中,因?yàn)橹挥泻诳蚩虻慕K端,所以在終端輸入指令是比較麻煩的,每次都需要重新實(shí)現(xiàn)解析字符串。
本篇文章分享一個(gè)自己常用的一套終端菜單系統(tǒng)。
代碼如下:
#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;
}
運(yùn)行結(jié)果如下:
****@****:~/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$
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
嵌入式
+關(guān)注
關(guān)注
5210文章
20682瀏覽量
337452 -
CMDB
+關(guān)注
關(guān)注
0文章
8瀏覽量
6884 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
321瀏覽量
23307
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
【申精】【轉(zhuǎn)帖】一個(gè)占用內(nèi)存極少的菜單系統(tǒng)的實(shí)現(xiàn)
LCD上直接使用這份代碼為什么公布這份代碼,使用的話需要授權(quán)什么的么? 文件目錄:1. MenuSampleCode目錄是代碼這份代碼我在我的硬件上測(cè)試過(guò)。2.說(shuō)明文檔是:一個(gè)占用內(nèi)存極少的菜單系統(tǒng)
發(fā)表于 01-22 15:53
基于VS2010單列樹(shù)形結(jié)構(gòu)文本菜單系統(tǒng)設(shè)計(jì)
在公司閑著,于是寫(xiě)了一個(gè)菜單系統(tǒng)。這個(gè)菜單系統(tǒng)不是很復(fù)雜的,功能簡(jiǎn)單。總共300多行代碼。實(shí)現(xiàn)1~255級(jí)和1~255相目錄顯示。這里放在VS上實(shí)現(xiàn),主要是便于調(diào)試,其實(shí)它主要用于帶普
發(fā)表于 07-31 14:58
深聯(lián)華單片機(jī)實(shí)現(xiàn)菜單系統(tǒng)
在各類儀器儀表的設(shè)計(jì)中,常常需要透過(guò)液晶和鍵盤(pán)來(lái)實(shí)現(xiàn)人機(jī)交互,當(dāng)整個(gè)系統(tǒng)需要管理的內(nèi)容較多的時(shí)候,如何透過(guò)鍵盤(pán)和液晶實(shí)現(xiàn)有效管理便是個(gè)問(wèn)題。通常軟件的設(shè)計(jì)者會(huì)設(shè)計(jì)一個(gè)
發(fā)表于 10-31 09:16
Ubuntu終端常用的快捷鍵
Ubuntu中的許多操作在終端(Terminal)中十分的快捷,記住一些快捷鍵的操作更得心應(yīng)手。在Ubuntu中打開(kāi)終端的快捷鍵是Ctrl+Alt+T。其他的一些
發(fā)表于 10-28 13:47
STC15單片機(jī)驅(qū)動(dòng)5寸屏幕做多級(jí)菜單顯示,用什么屏幕比較好?
最近在做一個(gè)項(xiàng)目,想用STC15來(lái)寫(xiě)一個(gè)多級(jí)菜單系統(tǒng),顯示在5寸屏幕上。
1、請(qǐng)問(wèn)各位朋友,選擇哪種屏幕比較好?請(qǐng)各位推薦幾塊屏幕,不勝感激!
2、還有就是做多級(jí)
發(fā)表于 10-07 07:33
9個(gè)優(yōu)秀的開(kāi)源工單系統(tǒng),你知道幾個(gè)
工單系統(tǒng)(也稱為問(wèn)題跟蹤系統(tǒng),故障工單系統(tǒng),支持工單或事件工單系統(tǒng))是一個(gè)計(jì)算機(jī)軟件包或基于We
發(fā)表于 06-17 04:10
?2.7w次閱讀
多級(jí)操作菜單顯示系統(tǒng)設(shè)計(jì)
本文旨在提供一個(gè)輕量級(jí)的單片機(jī)多級(jí)菜單實(shí)現(xiàn)方法,以較少的系統(tǒng)資源消耗和簡(jiǎn)單方便的方法完成菜單設(shè)計(jì)??紤]到
發(fā)表于 03-26 15:07
?8005次閱讀
Visual FoxPro使用教程之菜單設(shè)計(jì)與建立應(yīng)用程序系統(tǒng)
菜單是應(yīng)用程序的一個(gè)重要組成部分,VFP中可以通過(guò)以往的常規(guī)程序設(shè)計(jì)方法,直接編寫(xiě)代碼進(jìn)行菜單設(shè)計(jì),但通過(guò)VFP提供的菜單設(shè)計(jì)器,可以更為方
發(fā)表于 09-20 11:42
?0次下載
英創(chuàng)信息技術(shù)ARM9 Linux智能終端菜單界面設(shè)計(jì)介紹
、LCD128x64、LCD160x160等。在實(shí)際應(yīng)用中有許多對(duì)于菜單界面操作的需求,需要客戶根據(jù)應(yīng)用的具體要求自行構(gòu)建菜單顯示界面,本文將重點(diǎn)介紹這方面的內(nèi)容。
linux系統(tǒng)中如何創(chuàng)建文本菜單
當(dāng)使用Linux系統(tǒng)時(shí),最常見(jiàn)的Shell腳本交互類型是應(yīng)用菜單(文本菜單),文本菜單的核心是case命令。 H. L.使用case命令完成菜單
發(fā)表于 09-25 15:45
?1522次閱讀
AVR期末 自選設(shè)計(jì) 菜單系統(tǒng)多功能使用
Avr自選設(shè)計(jì)實(shí)踐內(nèi)容,綜合各個(gè)功能模塊設(shè)計(jì)基于菜單的實(shí)踐作品。1)基本內(nèi)容:設(shè)計(jì)菜單系統(tǒng)(lcd顯示菜單,或者數(shù)碼管顯示菜單編號(hào)),menu0實(shí)現(xiàn)具有校準(zhǔn)功能的時(shí)鐘
發(fā)表于 11-15 18:51
?6次下載
一個(gè)帶LCD的簡(jiǎn)單Arduino菜單
電子發(fā)燒友網(wǎng)站提供《一個(gè)帶LCD的簡(jiǎn)單Arduino菜單.zip》資料免費(fèi)下載
發(fā)表于 11-15 14:38
?1次下載
基于Arduino UNO的編碼器菜單系統(tǒng)
、編碼器兩個(gè)針腳、內(nèi)置按鈕一個(gè)針腳該函數(shù)控制輪次計(jì)數(shù),菜單控制器將此計(jì)數(shù)傳遞給變量。當(dāng)用戶單擊按鈕時(shí),計(jì)數(shù)器重置為 0。還有更簡(jiǎn)單更好的方法來(lái)控制變量。您可以使用方向變量(dir)。我
發(fā)表于 12-20 16:00
?0次下載
簡(jiǎn)單的菜單系統(tǒng)配置開(kāi)源設(shè)計(jì)
電子發(fā)燒友網(wǎng)站提供《簡(jiǎn)單的菜單系統(tǒng)配置開(kāi)源設(shè)計(jì).zip》資料免費(fèi)下載
發(fā)表于 06-09 10:31
?0次下載
會(huì)議一體機(jī)單系統(tǒng)與雙系統(tǒng)的區(qū)別在哪里?怎么選擇
體機(jī)通常具有更簡(jiǎn)單的設(shè)計(jì),僅配備一個(gè)操作系統(tǒng)和應(yīng)用程序,這種一體機(jī)通常更加可靠和易于維護(hù)。此外,單系統(tǒng)一體機(jī)價(jià)格上更便宜,適合只需要基本會(huì)議
分享一個(gè)常用的終端菜單系統(tǒng)
評(píng)論