Ncurses form.h,但如何实际使用输入?

Ncurses form.h,但如何实际使用输入?,c,forms,ncurses,C,Forms,Ncurses,所以,我一直在摆弄ncurses的form.h,这太棒了,菜单看起来很好用。但是,只是缺少了一些东西。我该如何处理输入的数据?我在互联网上搜索了一些例子,在所有的参考资料中都找不到任何人在使用表单数据做任何事情。当然,我们有一个很好的方法将文本输入表单中的字段,但是之后,我们通过释放表单和字段来销毁数据,然后我们甚至从未接触过。我们绝对不会用它做任何事 我怎样才能准确地使用这些字段?我们是在谈场上缓冲吗 #include <form.h> int main() { FIEL

所以,我一直在摆弄ncurses的form.h,这太棒了,菜单看起来很好用。但是,只是缺少了一些东西。我该如何处理输入的数据?我在互联网上搜索了一些例子,在所有的参考资料中都找不到任何人在使用表单数据做任何事情。当然,我们有一个很好的方法将文本输入表单中的字段,但是之后,我们通过释放表单和字段来销毁数据,然后我们甚至从未接触过。我们绝对不会用它做任何事

我怎样才能准确地使用这些字段?我们是在谈场上缓冲吗

#include <form.h>

int main() {
    FIELD *field[4];
    FORM  *my_form;
    int ch;

    /* Initialize curses */
    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    /* Initialize the fields */
    field[0] = new_field(1, 30, 1, 25, 0, 0);
    field[1] = new_field(1, 30, 3, 25, 0, 0);
    field[2] = new_field(1, 30, 4, 25, 0, 0);
    field[3] = new_field(1, 30, 5, 25, 0, 0);


    /* Set field options */

    for (int i = 0; i < 4; i++)
    {
        set_field_back(field[i], A_UNDERLINE);
        field_opts_off(field[i], O_AUTOSKIP);
    }


    /* Create the form and post it */
    my_form = new_form(field);
    post_form(my_form);
    refresh();

    mvprintw(0, 20, "");
    mvprintw(1, 10, "1:");
    mvprintw(2, 20, "");
    mvprintw(3, 10, "2:");
    mvprintw(4, 10, "3:");
    mvprintw(5, 10, "4:");
    mvprintw(6, 10, "Send (F1)");
    refresh();

    form_driver(my_form, REQ_FIRST_FIELD);

    /* Loop through to get user requests */
    while((ch = getch()) != KEY_F(1))
    {   switch(ch)
        {   case KEY_DOWN:
                /* Go to next field */
                form_driver(my_form, REQ_NEXT_FIELD);
                form_driver(my_form, REQ_END_LINE);
                break;
            case KEY_UP:
                /* Go to previous field */
                form_driver(my_form, REQ_PREV_FIELD);
                form_driver(my_form, REQ_END_LINE);
                break;
            case KEY_BACKSPACE:
                /* Delete last character */
                form_driver(my_form, REQ_DEL_PREV);
                break;
            case KEY_DC:
                /* Delete contents of field */
                form_driver(my_form, REQ_CLR_FIELD);
                break;
            case KEY_ENTER:
                form_driver(my_form, REQ_NEXT_FIELD);
                form_driver(my_form, REQ_END_LINE);
                break;
            default:
                /* If this is a normal character, it gets */
                /* Printed                */    
                form_driver(my_form, ch);
                break;
        }
    }
    form_driver(my_form, REQ_VALIDATION);
    for (int i = 0; i < 4; i++)
    {
        mvprintw(7+i, 20, field_buffer(field[i], 0)); // is this even workable?
    }
    /* Un post form and free the memory */
    unpost_form(my_form);
    free_form(my_form);
    for (int i = 0; i < 4; i++)
    {
        free_field(field[i]);
    }

    endwin();
    return 0;
}
#包括
int main(){
字段*字段[4];
表格*我的表格;
int-ch;
/*初始化诅咒*/
initscr();
cbreak();
noecho();
键盘(stdscr,真);
/*初始化字段*/
字段[0]=新的_字段(1,30,1,25,0,0);
字段[1]=新的_字段(1,30,3,25,0,0);
字段[2]=新的_字段(1,30,4,25,0,0);
字段[3]=新的_字段(1,30,5,25,0,0);
/*设置字段选项*/
对于(int i=0;i<4;i++)
{
将字段设置回(字段[i],下划线);
字段选择关闭(字段[i],自动关闭);
}
/*创建表单并发布它*/
我的表格=新表格(字段);
邮寄表格(我的表格);
刷新();
mvprintw(0,20,“”);
mvprintw(1,10,1:);
mvprintw(2,20,“”);
mvprintw(3,10,2:);
mvprintw(4,10,3:);
mvprintw(5,10,4:);
mvprintw(6,10,“发送(F1)”;
刷新();
表单驱动程序(我的表单,请求第一个字段);
/*通过循环获取用户请求*/
while((ch=getch())!=KEY_F(1))
{开关(ch)
{case KEY_DOWN:
/*转到下一个字段*/
表单驱动程序(我的表单,请求下一个字段);
表单驱动程序(我的表单,请求结束行);
打破
案例编号:
/*转到上一字段*/
表单驱动程序(我的表单,请求上一个字段);
表单驱动程序(我的表单,请求结束行);
打破
大小写键\u退格:
/*删除最后一个字符*/
表单驱动程序(我的表单,请求删除之前);
打破
案件关键案件:
/*删除字段的内容*/
表单驱动程序(我的表单,请求CLR\U字段);
打破
大小写键输入:
表单驱动程序(我的表单,请求下一个字段);
表单驱动程序(我的表单,请求结束行);
打破
违约:
/*如果这是一个普通字符,它会*/
/*打印*/
表格驱动程序(我的表格,ch);
打破
}
}
表单驱动程序(我的表单,请求验证);
对于(int i=0;i<4;i++)
{
mvprintw(7+i,20,field_buffer(field[i],0));//这是可行的吗?
}
/*取消post表单并释放内存*/
不受欢迎的表格(我的表格);
自由形式(我的形式);
对于(int i=0;i<4;i++)
{
自由场(场[i]);
}
endwin();
返回0;
}

作为ncurses一部分的课程应该是一个很好的起点。我想我已经确定field\u buffer是一个好去处。只是我不是一个C人,更像C++人,所以我真的在寻找一些例子,演示了如何处理数据。在这些例子中,我并没有找到任何简单的方法,当我找到一些使用fopen/fprintf的东西时,它们是复杂的例子,变得有点复杂。寻找一个简单的输出到文件的例子。我目前的fopen尝试完全失败了。