如何读取一个不完整的表单字段,请使用C++
How to read an incomplete form field ncurses C++
我有一段代码可以使用ncurses(C++)读取表单字段,但当表单字段不是完全类型时,我无法显示值。
#include <form.h>
#include <curses.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
WINDOW *chatwin, *entrywin;
FIELD *field[1];
FORM *fo;
void quit(void)
{
int i;
unpost_form(fo);
free_form(fo);
free_field(field[0]);
free_field(field[1]);
delwin(chatwin);
endwin();
}
int main(void)
{
int xsize, ysize;
int charinput, i;
char inputstring[200];
char ttime[10];
initscr();
atexit(quit);
clear();
noecho();
curs_set(1);
cbreak();
keypad(stdscr, TRUE);
getmaxyx(stdscr, ysize, xsize);
start_color();
use_default_colors();
init_pair(1, COLOR_YELLOW, COLOR_BLUE);
init_pair(2, COLOR_BLUE, COLOR_WHITE);
chatwin = newwin((ysize - 8), (xsize-21), 6, 21);
entrywin = newwin(1, (xsize-21), (ysize - 1), 21);
field[0] = new_field(1, (xsize - 21), 0, 0, 0, 10);
field[1] = 0;
set_form_win(fo, entrywin);
fo = new_form(field);
post_form(fo);
field_opts_on(field[0], O_STATIC);
set_field_fore(field[0], COLOR_PAIR(2));
set_field_back(field[0], COLOR_PAIR(2));
refresh();
wrefresh(chatwin);
wrefresh(entrywin);
while((charinput=getch()) != KEY_END)
{
switch(charinput)
{
case 10:
snprintf(inputstring, 200, "%s", field_buffer(field[0], 0));
struct tm *akttime;
time_t second;
time(&second);
akttime = localtime(&second);
strftime(ttime, 10, "%H:%M:%S", akttime);
wprintw(chatwin, "<%s> %s|n", ttime, inputstring);
wrefresh(chatwin);
set_field_buffer(field[0], 0, "");
wrefresh(entrywin);
break;
default:
form_driver(fo, charinput);
wrefresh(entrywin);
}
}
return(0);
}
输出
Obs.:第二行被键入:ejheeh,但输出为空
<02:31:42> dddddddkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkk|
<02:31:45>
|
<02:31:51> ddddddddddddddddddddddddddddddddddddddddddddddddddddfffffff
fffffffffff|
通常,ncurses表单库在您离开字段之前不会同步字段缓冲区。由于您试图在离开字段之前读取缓冲区,因此缓冲区没有当前内容。
强制缓冲区同步而不实际移动到下一个字段的一个简单方法是强制字段验证——这将同步,然后运行任何验证函数。
在case 10:
的开头添加此行
form_driver(fo, REQ_VALIDATION);
您可能需要检查验证错误:
if (form_driver(fo, REQ_VALIDATION) != E_OK) {
// do something
}
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- 如何使用连接器 c++ 在 mySQL 表二进制(16) 字段中存储 c++ 字节数组?
- 将带有字段的表作为参数从C++传递给 Lua 函数?
- C++创建一个链表,每个节点有超过 2 个字段
- FlatBuffer:如何在表中动态添加字段
- 访问程序中的符号表以打印结构的字段名称
- Lua/C++ :即使表的字段已知,也始终调用__index
- 分析多表单 MIME 类型的内容处置字段
- 链表中节点的字段未解析
- 使用 ADO 将原始文件数据插入访问表的 BLOB("OLE 对象")字段
- 在行中显示单击TableView中的行时编辑字段
- 如何将包含空格的字符串设置为HTML文本字段(在表单中)的默认值
- getline用于逗号分隔的表文件,在某些字段周围加引号