Pergunta

Eu estou tendo alguns problemas para obter getch ncurses () para bloco. operação padrão parece ser não-bloqueio (ou eu perdi alguma inicialização)? Eu gostaria que ele funcione como getch () no Windows. Tentei várias versões

timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...

(não todos ao mesmo tempo). Eu preferiria não (explicitamente) usar qualquer WINDOW, se possível. Um loop while torno getch (), a verificação de um valor de retorno específico é OK também.

Foi útil?

Solução

A biblioteca maldições é um pacote. Você não pode simplesmente retirar uma rotina e esperança para o melhor sem inicializar corretamente a biblioteca. Aqui está um código que corretamente blocos em getch():

#include <curses.h>

int main(void) {
  initscr();
  timeout(-1);
  int c = getch();
  endwin();
  printf ("%d %c\n", c, c);
  return 0;
}

Outras dicas

A partir uma página homem (grifo nosso):

As rotinas timeout e wtimeout definir o bloqueio ou sem bloqueio ler para uma determinada janela. Se delay é negativo, leitura de bloqueio é usada (ou seja, aguarda indefinidamente para entrada).

Você precisa chamar initscr() ou newterm() para maldições inicializar antes que ele vai trabalhar. Esta multa funciona para mim:

#include <ncurses.h>

int main() {
    WINDOW *w;
    char c;

    w = initscr();
    timeout(3000);
    c = getch();
    endwin();

    printf("received %c (%d)\n", c, (int) c);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top