在课程中nodelay()cbreak()有什么区别?为什么要使用这些函数,因为我们有getch()!如果我理解getch()允许在用户按下键后直接获取密钥。所以nodelaycbreak是无用的,不是吗?

最佳答案

它们是两个完全不同的功能。
从文档中:
通常,tty驱动程序缓冲键入的字符,直到键入换行符或回车符。cbreak例程禁用行缓冲和擦除/终止字符处理(中断和流控制字符不受影响),使用户键入的字符立即可用于程序。nocbreak例程将终端返回到正常(熟)模式。
...
nodelay选项使getch成为非阻塞调用。如果没有输入准备好,getch返回ERR。如果禁用(bf为FALSE),则getch将等待按键。
所以cbreak是如果你想禁用行缓冲,这可能有很多原因。一是避免每次打印后都使用fflush(stdout)。在启用行缓冲的情况下,打印输出通常在打印换行符之前在屏幕上不可见。
nodelay的描述是非常不言而喻的。getch不会等待,但如果按下或不按下任何键,则立即返回。

关于c - ncurses中的nodelay()和cbreak()有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56245062/

10-11 15:55