创建控制台菜单C++的最佳方式

Best way to create a console menu C++

本文关键字:最佳 方式 C++ 控制台 菜单 创建      更新时间:2023-10-16

所以我正在使用数据结构制作一个简单的控制台项目,但这里我想知道哪种方式最适合实现控制台菜单,我想知道它的最佳实践是什么,这是我的实际菜单

void MainMenu(){
while(1) 
{
int opt;
cout << endl << "----------------------------" << endl;
cout << endl << "      Main Menu   " << endl;
cout << endl << "----------------------------" << endl;
cin >> opt;
cout << "n" << endl;
switch (opt) 
{
case 1:
SubMenu();
break;
case 2:
//Code
break;
case 0:
exit(1);
default:
break;
}
}

子菜单的例子是这个

void Submenu()
{
bool exit=true;
while(exit) 
{
int opt;
cout << endl << "----------------------------" << endl;
cout << endl << "      SubMenu   " << endl;
cout << endl << "----------------------------" << endl;
cin >> opt;

switch (opt) 
{
case 1:
//Code
break;
case 0:
exit = false;
}
}

我想知道这是否是实现菜单的好方法,或者是否有更好的方法,我也想知道在哪里可以找到书籍或文档,以便以正确的方式进行编码,使我的程序不使用PC上的大量资源。

IMHO,表驱动的控制台菜单非常好
它们允许常量数据(可以存储在只读存储器中(
它们是数据驱动的(您不需要添加代码来添加更多选项(
;发动机";或者驾驶员可以进行一次测试;如果使用相同的结构,则可以使用一个函数来处理多个菜单。

typedef void (*Menu_Processing_Function_Pointer)(void);

struct Menu_Option
{
char choice;
char const * p_selection_text;
Menu_Processing_Function_Pointer p_processing_function;
};

void Process_Selection_One();
void Process_Selection_Two();

static const Menu_Option main_menu[] =
{
{'1', "Option 1", Process_Selection_One},
{'2', "Option 2", Process_Selection_Two},
};
static const size_t quantity_selections =
sizeof(main_menu) / sizeof(main_menu[0]);

int main()
{
static const char menu_title = 
"n"
"------------------------------n"
"         Main Menun"
"------------------------------n"
;
cout.write(menu_title, sizeof(menu_title) - 1);
for (size_t i = 0; i < quantity_selections; ++i)
{
std::cout << main_menu[i].p_selection_text << "n";
}
cout << "Enter selection, 0 to quit: ";
char choice;
cin >> choice;
for (size_t i = 0; i < quantity_selections; ++i)
{
if (choice == main_menu[i].choice)
{
Menu_Processing_Function_Pointer p_function = main_menu[i].p_processing_function;
(p_function)();
break;
}
}
return EXIT_SUCCESS;
}

当选择无效时,您必须实现循环
以上是该技术的要点。

i将使用其他循环,然后切换情况:

void MainMenu(){
char coice='';
while(coice !='#') 
{
int opt;
cout << endl << "----------------------------" << endl;
cout << endl << "      Main Menu   " << endl;
cout << endl << "----------------------------" << endl;
cin >> opt;
cout << "n" << endl;
if(coice =='1') 
{
SubMenu();
}
if(coice =='2') 
{
//Code
}
}
exit(1);
}

只要你没有选择结束程序,它就不会结束,而且更干净。

如果你愿意的话,你可以用同样的方式制作子菜单。