Lire un char sans s'arreter
Résolu
eric1708
Messages postés
101
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Mon problème est simple:
Je veux coder une boucle sans fin qui lire un char au clavier mais qui continue en séquence si aucun caractère n'est saisie. Par exemple, imaginer une programme qui code un timer. Le temps s'écoule, mais le programme s'arrête ou remet le timer à zéro lorsqu'une touche est saisi au clavier.
C'est un peu ce que fait getch() (par exemple), sauf que getch() s'arrête en attendant qu'une touche soit saisie, ce que je ne veux pas.
Quelqu'un à une idée?
D'avance merci, Eric.
Mon problème est simple:
Je veux coder une boucle sans fin qui lire un char au clavier mais qui continue en séquence si aucun caractère n'est saisie. Par exemple, imaginer une programme qui code un timer. Le temps s'écoule, mais le programme s'arrête ou remet le timer à zéro lorsqu'une touche est saisi au clavier.
C'est un peu ce que fait getch() (par exemple), sauf que getch() s'arrête en attendant qu'une touche soit saisie, ce que je ne veux pas.
Quelqu'un à une idée?
D'avance merci, Eric.
A voir également:
- Lire un char sans s'arreter
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Comment lire un message supprimé sur whatsapp - Guide
- Lire fichier bin - Guide
- Lire un qr code sur pc - Guide
3 réponses
Salut.
ce que tu veux faire, c'est de la programmation événementielle. Ce n'est pas simple à faire. En effet dans ce que tu veux faire, il y a plusieurs taches simultanées, une qui fait un truc et l'autre qui attend que tu entre quelque chose au clavier.
Il y a plusieurs façons de faire. Soit tu débloque le flux d'entrée pour qu'il ne soit plus bloquant, et tu vérifie à chaque itération que rien n'a été entré. Soit tu fais un thread qui stoppera la boucle principale lorsqu'un caractère sera choisi. Ou enfin, tu passe par une bibliothèque, type Qt, qui te permet de faire ça assez facilement.
ce que tu veux faire, c'est de la programmation événementielle. Ce n'est pas simple à faire. En effet dans ce que tu veux faire, il y a plusieurs taches simultanées, une qui fait un truc et l'autre qui attend que tu entre quelque chose au clavier.
Il y a plusieurs façons de faire. Soit tu débloque le flux d'entrée pour qu'il ne soit plus bloquant, et tu vérifie à chaque itération que rien n'a été entré. Soit tu fais un thread qui stoppera la boucle principale lorsqu'un caractère sera choisi. Ou enfin, tu passe par une bibliothèque, type Qt, qui te permet de faire ça assez facilement.
Bon, j'ai fini par trouver la réponse. La clef est la fonction kbhit() de conio.h. Voici un exemple de code bidon qui utilise ca:
Eric.
#include <stdio.h> #include <stdlib.h> #include <conio.h> int main(void) { int a,x=0; while (1) { if (kbhit()) { a=getch(); x=0; } x=x+1; if (a == 13) break; /* retour charriot */ (void)printf("%c %d\n",a,x); } return 0; }
Eric.
Alors effectivement, il y a _kbhit() (et non kbhit() qui est obsolète).
Sinon ce n'est clairement pas standard.
Et d'ailleurs il n'y a rien de standard (ni ISO89/90 ni ISO C99).
Pour simuler le comportement de _kbhit(), il faut passer le terminal en mode raw. Donc, à toi de coder le code. Ou utiliser une bibliothèque déjà existante comme Curses. C'est la solution la plus portable...
Sinon ce n'est clairement pas standard.
Et d'ailleurs il n'y a rien de standard (ni ISO89/90 ni ISO C99).
Pour simuler le comportement de _kbhit(), il faut passer le terminal en mode raw. Donc, à toi de coder le code. Ou utiliser une bibliothèque déjà existante comme Curses. C'est la solution la plus portable...
oy !
plutôt "simple", il faut que tu prenne des cours sur thread/mutex/semaphores histoire de faire tes appli multitâches ( j'ai juste un doute au niveau des bibliothèques entre windows/linux).
Pour commencer =>
https://franckh.developpez.com/tutoriels/posix/pthreads/
le plus difficile étant d'ordonner tes threads, mais vu ce que tu souhaites faire, ca va pas être dur ^^
bne aprem
naga
plutôt "simple", il faut que tu prenne des cours sur thread/mutex/semaphores histoire de faire tes appli multitâches ( j'ai juste un doute au niveau des bibliothèques entre windows/linux).
Pour commencer =>
https://franckh.developpez.com/tutoriels/posix/pthreads/
le plus difficile étant d'ordonner tes threads, mais vu ce que tu souhaites faire, ca va pas être dur ^^
bne aprem
naga
D'autres idées?
Eric.
https://linux.die.net/man/3/unlocked_stdio
Eric.