这应该管用
有人能告诉我为什么屏幕上看不到输入的输出吗?

#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);
一个零行零列的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));

关于c - 屏幕上没有字符发送到Ncurses键盘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57578362/

10-16 17:23