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