Question

Je vais avoir quelques problèmes pour bloquer la getch de ncurses (). fonctionnement par défaut semble être non-blocage (ou ai-je manqué une initialisation)? Je voudrais que cela fonctionne comme getch () dans Windows. J'ai essayé différentes versions de

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

(pas tous en même temps). Je préférerais ne pas (explicitement) utiliser WINDOW, si possible. Une boucle de while autour getch (), vérification d'une valeur de retour spécifique est OK aussi.

Était-ce utile?

La solution

La bibliothèque curses est un package deal. Vous ne pouvez pas simplement sortir une routine et espérer pour le mieux sans initialiser correctement la bibliothèque. Voici un code qui bloque correctement sur getch():

#include <curses.h>

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

Autres conseils

De une page de manuel (italique ajouté):

  

Les timeout et routines wtimeout set blocage ou non-bloquante pour   une fenêtre donnée. Si delay est négatif, lecture de blocage est utilisé (à savoir,   attend indéfiniment pour l'entrée).

Vous devez appeler initscr() ou newterm() pour initialiser malédictions avant qu'elle ne fonctionnera. Cela fonctionne bien pour moi:

#include <ncurses.h>

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

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

    printf("received %c (%d)\n", c, (int) c);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top