c/ncurses-对不同的程序部分使用getch
我正在编写一个简单的ncurses程序,其中包含一个菜单和创建/查看等不同部分,所有这些都使用键盘。目前,我有一个getkey例程,然后切换以确定键盘输入用于哪个部分,如下所示:c/ncurses-对不同的程序部分使用getch,c,keyboard,ncurses,getch,C,Keyboard,Ncurses,Getch,我正在编写一个简单的ncurses程序,其中包含一个菜单和创建/查看等不同部分,所有这些都使用键盘。目前,我有一个getkey例程,然后切换以确定键盘输入用于哪个部分,如下所示: ch = getch(); if(menu){ switch(ch){ ... if(create){ switch(ch){ ... if(view){ switch(ch){ ... 这是最好的方法还是我应该为每个部分设置不同的getkey例程菜单、视图等等-最好的方法是什么?这需要
ch = getch();
if(menu){
switch(ch){
...
if(create){
switch(ch){
...
if(view){
switch(ch){
...
这是最好的方法还是我应该为每个部分设置不同的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;
}
}
}
你的个案可能需要有更多的逻辑,但你明白了
具有简短的函数有助于提高可读性。现代编译器足够聪明,可以内联只调用一次的函数,删除函数调用并直接插入代码,因此不必担心性能。如果有人挑剔地读到了这一点——是的,这需要对不同编译单元中的函数进行链接时间优化
另一种选择是使用一个更新后始终指向当前输入焦点的函数指针,而不是使用开关,但在这里这太过分了。这是C++对虚拟函数的作用。