PDC在循环后输入上挂起

时间:2018-06-09 00:56:53

标签: c input 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在这里不起作用)

1 个答案:

答案 0 :(得分:1)

按ENTER键使getch()返回10(LF),而不是13(CR)。因此,永远不会达到第二个getch()。这不是特定于PDCurses或Windows。您可以通过调用raw()来更改PDCurses在这方面的行为,但可能是特定于PDCurses的。