Si vous êtes sous Windows, vous pouvez utiliser kbhit()ce qui fait partie de la bibliothèque d'exécution Microsoft. Si vous êtes sous Linux, vous pouvez implémenter kbhitainsi ( source ):
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
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;
}
Mise à jour: La fonction ci-dessus fonctionne sur OS X (au moins, sur OS X 10.5.8 - Leopard, donc je m'attendrais à ce qu'elle fonctionne sur les versions plus récentes d'OS X). Cet élément essentiel peut être enregistré kbhit.cet compilé sous Linux et OS X avec
gcc -o kbhit kbhit.c
Lorsqu'il est exécuté avec
./kbhit
Il vous invite à appuyer sur une touche et se termine lorsque vous appuyez sur une touche (non limité à Entrée ou aux touches imprimables).
@Johnsyweb - veuillez préciser ce que vous entendez par «réponse canonique détaillée» et «toutes les préoccupations». Aussi, re "multi-plateforme": Avec cette implémentation de, kbhit()vous pouvez avoir les mêmes fonctionnalités dans un programme C ++ sous Linux / Unix / OS X / Windows - à quelles autres plates-formes pourriez-vous faire référence?
Mise à jour supplémentaire pour @Johnsyweb: les applications C ++ ne vivent pas dans un environnement C ++ hermétiquement fermé. Une des principales raisons du succès de C ++ est l'interopérabilité avec C. Toutes les plates-formes traditionnelles sont implémentées avec des interfaces C (même si l'implémentation interne utilise C ++), donc votre discours sur "l'héritage" semble déplacé. De plus, comme nous parlons d'une seule fonction, pourquoi avez-vous besoin de C ++ pour cela ("C avec classes")? Comme je l'ai souligné, vous pouvez écrire en C ++ et accéder facilement à cette fonctionnalité, et il est peu probable que les utilisateurs de votre application se soucient de la façon dont vous l' avez implémentée.