MasterNKZ
Messages postés38Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention26 août 2004
-
2 févr. 2003 à 14:51
FlorimondH
Messages postés11Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention13 mars 2010
-
19 févr. 2010 à 00:54
Salut tout le monde,
Je programme en C sous linux, et je voudrai savoir si il existe une astuce pour rendre le getchar non bloquant, ou existe t-il une fonction similaire a getchar mais non bloquant.
j'ai une boucle de ce genre:
do{
c=getchar();
/*
series d'actions
*/
while(c!='q');
le probleme c ke arrivé à la ligne du getchar le prog s'y arrete et attend ke j'appuie sur une touche et moi je voudrai que si je tape rien il continue, parce ke dans cet exemple c comme si je faisais tourner le prog moi meme en appuyant sur une touche (differente de 'q' bien sur), c comme si ct du pas a pas, donc si vous pouviez m'aider.
trinitacs
Messages postés249Date d'inscriptionmardi 16 juillet 2002StatutMembreDernière intervention 7 août 20032 2 févr. 2003 à 15:02
-------------------------------
Réponse au message :
En fait tu veux savoir si la touche q a été pressé. Le gethar peut être non bloquant si le buffer est déjà plein. Mais ce n'est pas une solution car j'ai l'impression que tu désire détecter si la touche q a été pressée.
Pour cela utilise une bibliothèque ou les interuption du bios.
En tout cas je ne connais pas de fonction ANSI/ISO du C/C++ qui te signale qu'elle a été la touche pressé.
Sinon tu peux chercher dans le fichier équivalant à conio qui fourni getch();
-------------------------------
> Salut tout le monde,
>
> Je programme en C sous linux, et je voudrai savoir si il existe une astuce pour rendre le getchar non bloquant, ou existe t-il une fonction similaire a getchar mais non bloquant.
> j'ai une boucle de ce genre:
>
> do{
> c=getchar();
> /*
> series d'actions
> */
> while(c!='q');
>
> le probleme c ke arrivé à la ligne du getchar le prog s'y arrete et attend ke j'appuie sur une touche et moi je voudrai que si je tape rien il continue, parce ke dans cet exemple c comme si je faisais tourner le prog moi meme en appuyant sur une touche (differente de 'q' bien sur), c comme si ct du pas a pas, donc si vous pouviez m'aider.
>
> Niko
MasterNKZ
Messages postés38Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention26 août 2004 2 févr. 2003 à 20:45
j'ai deja teste tout ce ki pouvait ressembler a getchar de pres ou de loin dans <ncurses.h> et rien de convaincant.
cmarsc, je n'ai pas compris ta deuxieme phrase, je ne sais pas ce ke c ke kbhit...
cmarsc
Messages postés455Date d'inscriptionmercredi 6 mars 2002StatutMembreDernière intervention18 décembre 2003 3 févr. 2003 à 13:24
kbhit() <conio.h> (sous dos borland bien souvent) est une fonction qui detecte si une touche a été frappée, elle fait une boucle sans fin et s'arrecte une fois que l'on presse n'importe quelle touche, malheuresement est n'existe pas sous linux. il faut l'écrire nous même :-(
Vous n’avez pas trouvé la réponse que vous recherchez ?
MasterNKZ
Messages postés38Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention26 août 2004 3 févr. 2003 à 23:07
c bon g trouvé une astuce en mtapant les man en anglais, je met juste halfdelay(1) et j'utilise wgetch
halfdelay permet de parametrer le tps d'attente en dixieme de seconde pour wgetch(et autres cousins de wgetch).
Niko
FlorimondH
Messages postés11Date d'inscriptionlundi 24 septembre 2007StatutMembreDernière intervention13 mars 2010 19 févr. 2010 à 00:54
[Déterrage]
Merci t'as solution m'a aidé. Cependant, 'haldelay(1)', au lieu de rendre getch totalement non bloquant, introduit un dixième de seconde de temporisation alors que l'on pourrait utiliser simplement 'nodelay'