c - 循环后挂在输入上的 PDCurses
问题描述
在构建 PDCurses 应用程序时,我遇到了一个问题,即当我等待输入时,它会挂起并且不会将任何数据传递给程序,即使它在技术上仍在读取输入。我设法将其归结为以下代码:
#include <curses.h>
main()
{
initscr(); // initialize screen
noecho(); // don't echo the keys to the screen
cbreak(); // no waiting for enter key
clear(); // clear screen
while (getch() != 13) // loop until they press ENTER
mvaddch(0, 0, 'a'); // GETS PAST HERE
getch(); // HANGS; WINDOWS IS RECEIVING INPUT FROM THE KEYBOARD (turn off noecho()), BUT NEVER RETURNS IT TO THE ACTUAL PROGRAM
return 0;
}
为了说明它在我的程序中是如何显示的,我有一个循环main()
,无限调用一个函数,该函数将显示一个菜单,直到按下 ENTER 键。但是,如果用户在菜单中按下特定键,它将调用另一个菜单并从该函数获取输入。在上面的代码中,我通过两个后续getch()
调用对其进行了简化。
我的问题是,为什么它只在循环检查 ENTER 键后才挂起?这不应该是一件简单的事情吗?
此外,我的 PDCurses 应用程序正在 Windows cmd 上运行。(13 = ENTER;KEY_ENTER 在这里不起作用)
解决方案
按 ENTER 键getch()
返回 10 (LF),而不是 13 (CR)。因此,getch()
永远无法达到第二个。这不是特定于 PDCurses 或 Windows。您可以通过调用更改 PDCurses 在这方面的行为raw()
,但这可能是特定于 PDCurses 的。
推荐阅读
- java - RecyclerView 根本没有出现。我找不到错误。我该如何解决?
- amazon-web-services - 与 SQS 串在一起的多个 lambda 不传递到目的地
- python - 两个按钮在 csv 问题中打开同一张表?
- haskell - 如何从 GitHub 将 Haskell 包添加到我的 shell.nix 文件中?
- angular - 当用户单击角度 8(数据服务)时,发射不起作用
- ios - 将自定义框架 xib 加载到主应用程序中引发错误
- ubuntu - 从 `systemd` 脚本运行的 `dotnet` 命令找不到 AspNetCore 3.0,但可以从命令行运行
- bash - 当全局未安装 gulp 时,Bash 无法识别 gulp
- java - MongoTemplate 更新为同一文档设置数组中的多个对象
- regex - 带有 ascii 和控制字符的电子邮件正则表达式