使用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
)进行调试。
更好的是,使用一些构建自动化工具(如make
或ninja
)。 使用GNU make
获取灵感来编写Makefile
(其中tab -s是重要的)。
在我的Debian Sid上, pkg-config --cflags ncurses
给出-D_GNU_SOURCE -D_DEFAULT_SOURCE
和pkg-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库。