Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中使标准输入保持在终端的底部_C_Io_Terminal_Stdin_Instant Messaging - Fatal编程技术网

如何在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

我正在用c编写一个简单的即时消息客户端。它目前运行良好,但是如果用户正在键入并在键入时收到消息,消息将显示在文本之后,然后用户继续在下面的行中键入。它看起来是这样的:

用户:我正在尝试…朋友:你好


发个短信 通常的方法是使用(任何类型的诅咒都可以),在一个窗口中接受输入并将结果写入另一个窗口。下面是一个简短的例子:

#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甚至无法识别终端或计算机屏幕的存在:它只关注输入和输出流。