这应该管用
有人能告诉我为什么屏幕上看不到输入的输出吗?
#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/