gpt4 book ai didi

c - 显示菜单的奇怪方法

转载 作者:行者123 更新时间:2023-11-30 15:43:49 27 4
gpt4 key购买 nike

我正在对一些具有 SDK 的设备进行编程。

假设我想显示一些菜单。您通常会这样进行:

void showSomeMenu()
{


...
drawItem(0, "menu option1");
drawItem(1, "menu option2");

while(1)
{
key = getKey();
if(key == KEY_ENTER)
{
showSomeOtherMenu();
return; // or break
}
}
...

}

可以看到,如果用户点击上面的回车键,就可以打开someOtherMenu。现在假设用户想要从 someOtherMenu 返回。然后你像这样实现它:

void showSomeOtherMenu()
{


...
// add menu items

while(1)
{
key = getKey();
if(key == KEY_ENTER)
{
showSomeMenu(); // Will open previous menu (implemented in the first snippet)
return;
}
}
...

}

我觉得这种方法奇怪的是:比如说有人叫showSomeMenu。然后从名为 showSomeOtherMenu 的菜单中按 Enter 键。现在,他从 showSomeOtherMenu 单击Enter,它将再次调用 showSomeMenu ——但是注意,对 showSomeMenu 的第一次调用永远没有机会返回。

尽管这种方法有效并且菜单将正确显示,但我想知道这是否会以函数相互调用的无限循环结束。也许我会遇到堆栈溢出问题或类似的问题。

我的担心有道理吗?他们的样本中展示了这种方法。所以我想这应该是正确的做法。

最佳答案

是的,你的担心是对的,这看起来是一个非常糟糕的设计。

一般来说,以数据驱动的方式设计这样的东西要好得多,即使用描述所需层次结构的被动数据结构,然后只是一个函数(runMenu () 或其他东西)解释数据并跟踪当前菜单以及允许哪些“移动”。

关于c - 显示菜单的奇怪方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19708014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com