gpt4 book ai didi

c/ncurses - 在不同的程序部分使用 getch

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:23 24 4
gpt4 key购买 nike

我正在编写一个带有菜单和不同部分(创建/查看等)的简单 ncurses 程序,全部使用键盘。目前我有一个 getkey 例程,然后切换以确定键盘输入用于哪个部分,如下所示:

ch = getch();

if(menu){
switch(ch){
...

if(create){
switch(ch){
...

if(view){
switch(ch){
...

这是执行此操作的最佳方法还是我应该为每个部分(menu_getkey()、view_getkey() 等)设置不同的 getkey 例程 - 执行此操作的最佳方法是什么?

最佳答案

这涉及到一些设计(因此可能有点主观),但我认为您的方法很好。它允许您在深入研究细节之前处理接近 getch() 的常见输入逻辑,一般来说,如果可能,在单个位置处理事件(例如,键盘输入)通常是个好主意 - - 随着程序的增长,具有多个事件循环往往会变得困惑。

一种等效的写法如下:

enum { MENU, CREATE, VIEW } input_focus = MENU;

...

void input_loop(void) {
for (;;) {
int ch = getch();

/* Put common input logic here. */

switch (input_focus) {
case MENU:
handle_menu_input(ch);
break;

case CREATE:
handle_create_input(ch);
break;

case VIEW:
handle_view_input(ch);
break;
}
}
}

您的个人 case 可能必须在其中包含更多逻辑,但您明白了。

短函数有助于提高可读性。现代编译器足够聪明,可以内联只调用一次的函数(删除函数调用并直接插入代码),所以不用担心性能问题。 (如果有人挑剔地读到这篇文章——是的,它需要对不同编译单元中的函数进行链接时间优化。)

让您更新的函数指针始终指向当前输入焦点而不是使用 switch 将是另一种选择,但它在这里有点矫枉过正。这有点像 C++ 为虚函数做的事情。

关于c/ncurses - 在不同的程序部分使用 getch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28915457/

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