使用curses.h从键盘获取char

我正在尝试使用curses.h从键盘获取一个字符。 这是我的源码(get_char_example.c):

#include  #include  int main(void) { char ch; printf("Enter a character: "); ch = getch(); printf("\nIts ASCII code is %d\n", ch); return 0; } 

我使用以下命令编译:

 gcc get_char_example.c -o get_char_example 

我收到以下错误:

/tmp/ccjaXwRU.o:在函数`main’中:

 get_char_example.c:(.text+0x1c): undefined reference to `stdscr' get_char_example.c:(.text+0x24): undefined reference to `wgetch' collect2: error: ld returned 1 exit status 

使用:gcc(GCC)7.2.0 Arch Linux 4.13.9-1-ARCH

提前致谢!

这是一个链接器错误(见此,几乎是重复的)。 ncurses通常为pkg-config (在需要时提供更多依赖项)所知,所以尝试编译:

  gcc -Wall -Wextra -g \ $(pkg-config --cflags ncurses) \ get_char_example.c \ $(pkg-config --libs ncurses) 

您想要使用所有警告和调试信息调用GCC ; 您可以使用GDB (可能在emacs下或使用ddd )进行调试。

更好的是,使用一些构建自动化工具(如makeninja )。 使用GNU make获取灵感来编写Makefile (其中tab -s是重要的)。

在我的Debian Sid上, pkg-config --cflags ncurses给出-D_GNU_SOURCE -D_DEFAULT_SOURCEpkg-config --libs ncurses给出-lncurses -ltinfo ,所以简单地用-lncurses链接是不够的(这就是为什么这不是一个今天在2017年11月复制;几年前与简单的-lncurses连接就足够了,今天它不是。

使用pkg-config --list-all查找pkg-config已知的所有包和库; 在开发库时, 考虑为它提供一些.pc文件。

顺便说一句,你的程序应该从使用printw初始化并使用printw ; 阅读Ncurses-programming-How即使它有点旧 。

另请注意,在21世纪使用ASCII已经过时了。 程序和计算机在任何地方都使用UTF-8 ,这会产生深刻的后果,你应该知道(因为UTF-8字符可以跨越几个字节)。 我的法语键盘有²§é (即使你可以粘贴它们的美国键盘),这些都不是ASCII。 考虑使用一些像libunistring这样的UTF-8库。