J’essaie d’obtenir une E / S non bloquante sur une application de terminal Windows (Windows uniquement, désolé!).
Que se passe-t-il si je souhaite avoir un bref délai de saisie dans lequel l’utilisateur peut appuyer sur un bouton, mais s’il ne le fait pas, la saisie s’arrête et le programme continue?
Par exemple:
Une timer qui compte de 1 à ce qui s’arrête lorsque l’utilisateur appuie sur une certaine touche: je devrais avoir une boucle while, mais si je fais un getch ou une fonction getchar, le programme sera arrêté, non?
Je sais que je pourrais utiliser kbhit (); , mais pour le “programme”, j’essaie de faire en sorte que je dois connaître l’entrée, pas seulement SI IL Y A UNE entrée! Existe-t-il des fonctions simples qui me permettraient de lire comme la dernière touche de la mémoire tampon du clavier?
De la documentation pour _kbhit()
:
La fonction
_kbhit
recherche sur la console une frappe récente. Si la fonction renvoie une valeur différente de zéro, une frappe est en attente dans la mémoire tampon. Le programme peut ensuite appeler_getch
ou_getche
pour obtenir la frappe.
Alors, dans ta boucle:
while (true) { // ... if (_kbhit()) { char c = _getch(); // act on character c in whatever way you want } }
Donc, vous pouvez toujours utiliser _getch()
, mais limitez son utilisation à après que _kbhit()
indique qu’il y a quelque chose en attente. De cette façon, il ne bloquera pas.