gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:44:35 26 4
gpt4 key购买 nike

这是我第一次使用 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);
}

它在没有任何输入的情况下打印出很多“?”。谁能帮我理解出了什么问题吗?谢谢。

编辑:删除死代码。

最佳答案

该程序至少存在三个问题:

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

  • 即使您初始化了屏幕,使用多个线程调用 getch 也不会按预期工作,因为它不是线程安全的。这是一个常见问题解答:Why does (fill in the blank) happen when I use two threads?

  • printf 可以做一些事情,但是混合 stdio (printf) 和curses 并不能按照您想要的方式工作。将printw用于curses应用程序。

至于打印 ? ,那些 -1 发​​送到需要 UTF-8 的终端可能会决定它们不是有效的 UTF-8 并显示 replacement character

关于c - 如何在循环中使用 getch() (nCurses),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com