您是否查看过<curses.h>该getch()功能的作用?
提示:OSX 和 Linux 与 Windows 不同。
具体来说,作为 中的宏<curses.h>,我们发现:
#define getch() wgetch(stdscr)
现在,在您的系统上,getch()curses 库中似乎有一个实际函数,但它希望stdscr被设置,这是由 curses 初始化函数(initscr()和亲属)完成的,而这显然不是由您的代码完成的. 因此,您的代码通过在正确初始化完成之前调用 curses 例程来调用未定义的行为,从而导致崩溃。
(来自 dmckee 的好提示 - 它有助于将链接线从 acidzombie24 中取出,这很重要。)
为了达到可以读取单个按键并干净地终止程序的程度,您必须在 Unix(OSX、Linux)上做大量工作。您必须捕获终端的初始状态,安排一个atexit()函数 - 或一些类似的机制 - 来恢复终端的状态,将终端从熟模式更改为原始模式,然后调用一个函数来读取一个字符(可能只是read(0, &c, 1)),然后退出。可能还有其他方法可以做到这一点 - 但它肯定会涉及一些设置和拆卸操作。
一本可能有帮助的书是高级 Unix 编程, Mark Rochkind 的第二版;它涵盖了所需级别的终端处理。或者,您可以<curses.h>正确使用 - 这将比您自己的解决方案更简单,并且可能更可靠。