如何在循环中使用getch()(nCurses)

时间:2017-06-07 19:13:11

标签: c multithreading ncurses

这是我第一次使用ncurses库。所以,我想使用getch()来获取用户输入的字符(每次都不按回车)。但是,当我运行此代码时:

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

void *userInput() {
char c;

while((c = getch()) != '~') {
    printf("%c\n",c);
}

pthread_exit(NULL);

}

int main() {
    cbreak();

    pthread_t threads[4];

    pthread_create(&threads[0], NULL, userInput, NULL);

    pthread_exit(NULL);
}

在没有任何输入的情况下打印很多'?'。有谁能帮我理解什么是错的? 谢谢。

编辑:删除死代码。

1 个答案:

答案 0 :(得分:0)

该计划至少有三个问题:

  • getch将始终返回错误,因为您未使用initscrnewterm初始化屏幕。同样,cbreak调用除了返回错误外什么都不做。

  • 即使您初始化了屏幕,使用多个线程调用getch也无法预测,因为它不是线程安全的。这是一个FAQ:Why does (fill in the blank) happen when I use two threads?

  • printf做了一些事情,但混合stdio(printf)和curses不能按你的意愿工作。使用printw表示curses应用程序。

对于打印 ? ,发送到期望UTF-8的终端的那些-1可能会判定它们无效UTF-8并显示replacement character