如何在不清除屏幕的情况下使用来自curses的getch?

Chr*_*s R 9 c curses ncurses

我正在学习用C语言编程,并且希望能够在我的代码运行时能够在没有按下的情况下在终端中键入字符return.我的程序有效,但是当我打电话时initscr(),屏幕被清除 - 即使在通话后也是如此filter().该文档filter建议它应该禁用清除 - 但对我来说情况并非如此.

#include <stdio.h>
#include <curses.h>
#include <term.h>

int main(void) {

    int ch;

    filter();
    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    while((ch = getch()) != EOF);

    endwin();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码仍然清晰的屏幕,以及可以做些什么来解决它?

如果有帮助,我正在使用Debian Lenny(稳定版)和gnome-terminal.

mik*_*dld 1

使用newterm()而不是initscr(),那么你应该没问题。并且不要忘记delscreen()您是否遵循此建议。

  • 迈克,它没有清除屏幕的唯一原因是您颠倒了 newterm() 的参数。它需要标准输出、标准输入,而不是标准输入、标准输出。我敢打赌,你的测试程序运行后,你的输入是混乱的?也许没有回声?如果您对 newterm() 使用正确的参数顺序,它确实会清除屏幕。你的答案是错误的。 (7认同)