PDCurses висит на входе после цикла - PullRequest
0 голосов
/ 09 июня 2018

Когда я создавал приложение 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 голосов
/ 09 июня 2018

При нажатии клавиши ВВОД getch() возвращает 10 (НЧ), а не 13 (ЧР).Таким образом, второй getch() никогда не достигается.Это не относится к PDCurses или Windows.Вы можете изменить поведение PDCurses в этом отношении, вызвав raw(), но может быть специфичным для PDCurses.

...