在STM32开发中,可以通过链表来实现菜单功能。链表是一种数据结构,它由若干个节点组成,每个节点都包含数据和指向下一个节点的指针。通过这种方式,可以构建一个动态的数据结构,实现灵活的菜单系统。
下面是一个使用链表实现菜单功能的示例代码:
#include "main.h"
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
// 菜单节点
struct MenuItem
{
const char* name; // 节点名称
MenuItem* next; // 下一个节点的指针
void (*function)(); // 节点功能函数的指针
};
// 菜单类
class Menu
{
public:
Menu();
void AddItem(const char* name, void (*function)());
void Run();
private:
MenuItem* mHead;
};
// 菜单构造函数
Menu::Menu()
: mHead(nullptr)
{
}
// 添加菜单节点
void Menu::AddItem(const char* name, void (*function)())
{
MenuItem* item = new MenuItem;
item->name = name;
item->function = function;
item->next = mHead;
mHead = item;
}
// 运行菜单系统
void Menu::Run()
{
MenuItem* current = mHead;
char input[32];
// 遍历链表,打印菜单选项
while (current != nullptr)
{
std::cout << current->name << std::endl;
current = current->next;
}
// 等待用户输入选择
std::cout << "Enter your choice: ";
std::cin >> input;
// 查找用户输入对应的菜单节点,并执行功能函数
current = mHead;
while (current != nullptr)
{
if (strcmp(current->name, input) == 0)
{
current->function();
return;
}
current = current->next;
}
std::cout << "Invalid choice." << std::endl;
}
// 菜单功能函数1
void Function1()
{
std::cout << "Function 1 executed." << std::endl;
}
// 菜单功能函数2
void Function2()
{
std::cout << "Function 2 executed." << std::endl;
}
int main()
{
// 初始化菜单
Menu menu;
menu.AddItem("function1", &Function1);
menu.AddItem("function2", &Function2);
// 运行菜单系统
while (1)
{
menu.Run();
}
}
|