屏幕上没有字符发送到 Ncurses pad

No characters on screen sent to an Ncurses pad

这应该有效 谁能告诉我为什么我在屏幕上看不到输入的输出?

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


int nRows;
int nCols;

WINDOW  *myPad;


int main(void)
{

  initscr();

  getmaxyx(stdscr, nRows, nCols);

  myPad = newpad(nRows, nCols);


  while (1)
  {
    waddch(myPad, wgetch(myPad));
    prefresh(myPad, 0, 0, 0, 0, nRows, nCols);
  }

  return EXIT_SUCCESS;
}

我不知道……其他类似的例子也行得通。 这可能是一个 Ubuntu 问题吗?

18.04.3 今日最新补丁

调用initscr后,stdscr中的当前位置为0,0。然后您的程序会询问位置并将其用作焊盘的大小:

getyx(stdscr, nRows, nCols);

myPad = newpad(nRows, nCols);

具有 zero 行和 zero 列的 pad 不会在屏幕上显示太多.

修改后的问题,还有两个问题:

  • 输入已缓冲(使用 cbreak 更改)
  • 循环前少了一个refresh(保证显示stdscr

这是一个差异,显示了可以采取哪些措施来解决这些问题:

> diff -u foo.c.orig foo.c
--- foo.c.orig  2019-08-21 19:24:24.000000000 -0400
+++ foo.c       2019-08-21 19:30:46.202769968 -0400
@@ -13,12 +13,14 @@
 {
 
   initscr();
+  cbreak();
+  noecho();
 
   getmaxyx(stdscr, nRows, nCols);
 
   myPad = newpad(nRows, nCols);
 
-
+  refresh();
   while (1)
   {
     waddch(myPad, wgetch(myPad));