Existe-t-il un moyen de détecter si une touche a été enfoncée?

Je comstack et exécute mes programmes en cygwin sur un ordinateur Windows. Je suis assez inexpérimenté en C mais je voudrais un moyen de détecter si une touche a été enfoncée sans demander à l’utilisateur (par exemple, moi). Mon pseudo-code avec des fonctions souhaitables est présenté ci-dessous.

char ch; while(1){ if(KeyBeenPressed()){ //a key has been pressed before getting here ch=getKeyPressed(); if(ch=='0'){ printf("you have pressed 0"); } else{ printf("you did't press key 0"); } } //do other stuff } 

Et ma propre tentative de résolution de ce problème après une recherche sur le Web est présentée ci-dessous.

 #include  #include  char ch; void main(){ while(1){ if(kbhit()){ //kbhit is 1 if a key has been pressed ch=getch(); printf("pressed key was: %c", ch); } } } 

Un problème avec ce code est que le fichier conio.h est introuvable (et je n’ai trouvé aucun autre moyen de le résoudre). Apparemment, les compilateurs gcc ne peuvent pas gérer conio.h (j’ai joint le lien où il se trouvait). http://www.programmingsimplified.com/c/conio.h

Je me demande donc si certains d’entre vous connaissent un moyen de détecter si une touche a été actionnée en C, j’aimerais également récupérer la touche appuyée de préférence dans un caractère (je prévois d’utiliser 0-9 pour cette application). L’important est que le programme ne puisse attendre qu’une touche soit enfoncée.

Je suis reconnaissant pour toute suggestion qui pourrait résoudre ce problème! Cordialement Henrik

J’utilise la fonction suivante pour kbhit() . Cela fonctionne très bien sur le compilateur g ++ sous Ubuntu.

 #include  #include  #include  int kbhit(void) { struct termios oldt, newt; int ch; int oldf; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); if(ch != EOF) { ungetc(ch, stdin); return 1; } return 0; } 

La plupart des plates-formes Dos, Windows 3.x ou win32 fournissent le fichier conio.h, mais les systèmes Unix ou Linux ne fournissent pas ce fichier normalement. Si vous utilisez unix ou linux, vous devez le télécharger vous-même sur Internet. J’espère que ma réponse vous sera utile.