【发布时间】:2017-12-02 03:01:28
【问题描述】:
我正在用 ncurses 编写一个文本编辑器。程序以原始模式初始化。所以我需要手动做很多事情,比如删除,避免打印不可打印的字符等。
删除:
void console(ch)
{
if(ch == 8) //8 = backspace according to asciitables.com
{
printw("\b");
printw(" ");
}
else
{
addch(ch);
}
}
为了避免不可打印的字符:
void console(ch)
{
bool safe = TRUE;
int avoid[] = { 1,2,3,4,5,6,7,8};
for(int i=0;i<4;i++)
{
while(ch==avoid[i])
{
safe = false;
}
}
if(safe)
{
printw("%c",ch); //Prints the key's characters on the screen.
}
else
{
break;
}
}
在删除中,我想在终端中删除之前打印的字符并插入一个空格并将光标移回前一个字符的位置。但这不起作用。
在避免不可打印字符中,我想避免打印不可打印字符而只打印可打印字符。但这似乎也不起作用。
如果有人指出我错在哪里并纠正我,那将非常有帮助。如果有人能告诉我 ncurses 库中是否有任何特定功能,那也会很有帮助。我对 ncurses 非常陌生。
【问题讨论】:
-
您正在打印到终端,而不是“标准输出”。不要将 stdout 与终端混为一谈,尤其是在您编写基于 curses 的程序时。
-
好的。改变了那个。但是告诉我我哪里错了??
-
到底是怎么回事?如果
printw("\b")完全有效,您会希望printw("\b \b");用空格覆盖并将光标留后退。 -
感谢工作。但是如何避免不可打印的字符呢??
-
您是否尝试过检查每个字符:isprint(ch)