如何在C语言中使标准输入保持在终端的底部
我正在用c编写一个简单的即时消息客户端。它目前运行良好,但是如果用户正在键入并在键入时收到消息,消息将显示在文本之后,然后用户继续在下面的行中键入。它看起来是这样的: 用户:我正在尝试…朋友:你好如何在C语言中使标准输入保持在终端的底部,c,io,terminal,stdin,instant-messaging,C,Io,Terminal,Stdin,Instant Messaging,我正在用c编写一个简单的即时消息客户端。它目前运行良好,但是如果用户正在键入并在键入时收到消息,消息将显示在文本之后,然后用户继续在下面的行中键入。它看起来是这样的: 用户:我正在尝试…朋友:你好 发个短信 通常的方法是使用(任何类型的诅咒都可以),在一个窗口中接受输入并将结果写入另一个窗口。下面是一个简短的例子: #include <curses.h> int main(void) { bool done = FALSE; WINDOW *input, *outp
发个短信 通常的方法是使用(任何类型的诅咒都可以),在一个窗口中接受输入并将结果写入另一个窗口。下面是一个简短的例子:
#include <curses.h>
int
main(void)
{
bool done = FALSE;
WINDOW *input, *output;
char buffer[1024];
initscr();
cbreak();
echo();
input = newwin(1, COLS, LINES - 1, 0);
output = newwin(LINES - 1, COLS, 0, 0);
wmove(output, LINES - 2, 0); /* start at the bottom */
scrollok(output, TRUE);
while (!done) {
mvwprintw(input, 0, 0, "> ");
if (wgetnstr(input, buffer, COLS - 4) != OK) {
break;
}
werase(input);
waddch(output, '\n'); /* result from wgetnstr has no newline */
waddstr(output, buffer);
wrefresh(output);
done = (*buffer == 4); /* quit on control-D */
}
endwin();
return 0;
}
#包括
int
主(空)
{
bool done=FALSE;
窗口*输入,*输出;
字符缓冲区[1024];
initscr();
cbreak();
回声();
输入=newwin(1,COLS,行-1,0);
输出=newwin(行-1,COLS,0,0);
wmove(输出,行-2,0);/*从底部开始*/
scrollok(输出,真);
而(!完成){
mvwprintw(输入,0,0,“>”;
如果(wgetnstr(输入、缓冲区、列-4)!=OK){
打破
}
werase(输入);
wgetnstr的waddch(输出“\n”);/*结果没有换行符*/
waddstr(输出、缓冲器);
新鲜蔬菜(产量);
完成=(*缓冲区==4);/*在控件D上退出*/
}
endwin();
返回0;
}
如果您想了解VT100控制代码(不同于ECMA-48),请提供一些终端手册
关于链接:这是错误信息的来源,正如您可能想阅读的ncurses FAQ中所述,或者关于使用将光标置于该位置。纯标准C无法做到这一点。C甚至无法识别终端或计算机屏幕的存在:它只关注输入和输出流。