modifier une boucle avec le clavier...

modifier une boucle avec le clavier... - C - Programmation

Marsh Posté le 17-07-2003 à 12:22:40    

yop,
 
 
je voudrais pouvoir interagir avec mon programme en C en tapant des touches au clavier (sans devoir appuyer sur Enter)
 
par exemple
 
 
 
while(1)
{
   printf("brol" );
   if(touche 'a' enfoncée) printf("pout" );
   if(touche 'b' ...)
}
 
 
En C le plus standard possibleuh...
 
j'ai vraiment aucune idée de départ :p
 
mercito :)

Reply

Marsh Posté le 17-07-2003 à 12:22:40   

Reply

Marsh Posté le 17-07-2003 à 12:24:05    

fgets ?

Reply

Marsh Posté le 17-07-2003 à 12:37:51    

impossible en C standard, le C ne connait pas la notion de clavier. précise ta plateforme

Reply

Marsh Posté le 17-07-2003 à 14:35:36    

je suis sur AIX
 
 
 
 
 


---------------
oui oui
Reply

Marsh Posté le 17-07-2003 à 15:03:12    

art_dupond a écrit :

je suis sur AIX
 
 
 
 
 
 

ben soit tu passes par ncurses, soit tu me contactes sur ICQ, je te retrouverai un bout de code pour faire ça

Reply

Marsh Posté le 17-07-2003 à 22:59:35    

yop merci.
 
 
donc je crois que je vais passer par ncurses... enfin je vais d'abord essayer de trouver ce que c'est :sweat:  
 
 
 
tu pourrais pas m'envoyer ton bout de code autrement que par icq. Parce que j'ai pas icq tout betement :p
 
sinon je vais déjà essayer de me débrouiller avec la piste que j'ai :)
 
 
mercito :)

Reply

Marsh Posté le 17-07-2003 à 23:12:58    

getch.h

Code :
  1. int getch();


 
getch.c

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #include <termios.h>
  5. #include <unistd.h>
  6.  
  7.  
  8. static struct termios configuration_initiale;
  9. static struct termios configuration_brute;
  10.  
  11. static void initialisation_configuration_clavier();
  12. static void initialisation_clavier();
  13. static void restauration_clavier();
  14.  
  15.  
  16. int getch()
  17. {
  18.   int c;
  19.   /* on bascule */
  20.   initialisation_clavier();
  21.   c = getchar();
  22.  
  23.   /* retour au mode normal */
  24.   restauration_clavier();
  25.   return c;
  26. }
  27.  
  28. /* Gestion du clavier en mode brut */
  29.  
  30.  
  31. static void initialisation_configuration_clavier()
  32. {
  33.   static char is_init=0; 
  34.      
  35.   if(!is_init)
  36.     {
  37.       is_init = 1;
  38.      
  39.       tcgetattr(STDIN_FILENO, &configuration_initiale);
  40.      
  41.       configuration_brute = configuration_initiale;
  42.       cfmakeraw(&configuration_brute);
  43.       configuration_brute.c_cc[VMIN]  = 1;
  44.       configuration_brute.c_cc[VTIME] = 0;
  45.     }
  46. }
  47.  
  48. static void initialisation_clavier()
  49. {
  50.   initialisation_configuration_clavier(); 
  51.   tcsetattr(STDIN_FILENO, TCSANOW, &configuration_brute);
  52. }
  53.    
  54. static void restauration_clavier()
  55. {
  56.   tcsetattr(STDIN_FILENO, TCSANOW, &configuration_initiale);
  57. }


 
main.c de test

Code :
  1. #include <stdio.h>
  2. #include "getch.h"
  3. int main()
  4. {
  5.   char c = getch();
  6.   printf("J\'ai lu \'%c\'\n", c);
  7.   return 0;
  8. }


Message édité par Taz le 19-04-2004 à 23:48:18
Reply

Marsh Posté le 17-07-2003 à 23:14:31    

t'as essayé kbhit() ? si elle existe bien sûr..


Message édité par *syl* le 17-07-2003 à 23:15:26
Reply

Marsh Posté le 17-07-2003 à 23:16:58    

Apparemment elle existe pas sous *nux..
http://www.cppfrance.com/article.aspx?Val=1650

Reply

Marsh Posté le 17-07-2003 à 23:17:05    

*Syl* a écrit :

t'as essayé kbhit() ? si elle existe bien sûr..

jamais entendu parler de ça sur systeme *n*x

Reply

Marsh Posté le 17-07-2003 à 23:17:05   

Reply

Marsh Posté le 17-07-2003 à 23:18:08    

ben si tu regardes, je fournis exactement le meme code en C, mais en mieux par ce qu'avec le magnifique code de ce putain de site, impossible de détecter EOF, aucune gestion d'erreur, et plein de paramètre en trop


Message édité par Taz le 17-07-2003 à 23:20:11
Reply

Marsh Posté le 17-07-2003 à 23:20:19    

++Taz a écrit :

ben si tu regardes, je fournis exactement le meme code en C

Moralité : y'aurais cherché correctement sur google, y'aurais pas eu besoin de poster ici :D

Reply

Marsh Posté le 17-07-2003 à 23:22:01    

*Syl* a écrit :

Moralité : y'aurais cherché correctement sur google, y'aurais pas eu besoin de poster ici :D

désolé mais ton lien est de mauvais conseil, alors il a bien fait de poser la question


Message édité par Taz le 17-07-2003 à 23:22:26
Reply

Marsh Posté le 17-07-2003 à 23:26:48    

++Taz a écrit :

désolé mais ton lien est de mauvais conseil, alors il a bien fait de poser la question

Bah ça dépend, si c'est une feignasse et qu'il copie/colle c'est pas bien mais dans l'autre cas, il prend seulement ce qu'il veut et corrige voilà..

Reply

Marsh Posté le 17-07-2003 à 23:32:44    

*Syl* a écrit :

Bah ça dépend, si c'est une feignasse et qu'il copie/colle c'est pas bien mais dans l'autre cas, il prend seulement ce qu'il veut et corrige voilà..

:heink: de toutes façons, t'en connais beaucoup des OS qui finissent en nux ?

Reply

Marsh Posté le 17-07-2003 à 23:35:19    

Hein ? :heink:

Reply

Marsh Posté le 17-07-2003 à 23:37:48    

Reply

Marsh Posté le 17-07-2003 à 23:46:41    

Wé, je l'sais bien que tu faisais référence à ce post, j'suis pas idiot ! N'empêche que j'vois pas le sens de ta remarque, t'as dû mal saisir c'que j'ai voulu dire : tu m'sors que le lien est un mauvais conseil, oui et non : si c'est une feignasse qui veut pas se casser la tête il copiera bêtement le code présent sur le site et tant pis pour lui, s'il veut faire ça proprement il récupère c'qui l'intéresse (fonctions, struct à utiliser..) et le recode à sa guise proprement.. voilà c'est tout..

Reply

Marsh Posté le 17-07-2003 à 23:55:04    

*Syl* a écrit :

Wé, je l'sais bien que tu faisais référence à ce post, j'suis pas idiot ! N'empêche que j'vois pas le sens de ta remarque, t'as dû mal saisir c'que j'ai voulu dire : tu m'sors que le lien est un mauvais conseil, oui et non : si c'est une feignasse qui veut pas se casser la tête il copiera bêtement le code présent sur le site et tant pis pour lui, s'il veut faire ça proprement il récupère c'qui l'intéresse (fonctions, struct à utiliser..) et le recode à sa guise proprement.. voilà c'est tout..

et moi je poste un meilleur code pour rien...

Reply

Marsh Posté le 18-07-2003 à 00:00:17    

Euuh.. qd j'ai posté le lien, j'étais déjà depuis qq mins dans la page de réponse ce qui fait que j'avais pas vu ton code.. Tu m'diras que j'aurais pu supprimer mon message en voyant ton code mais que neni, j'cherche pas dans l'vent et le pire c'est que ça aurait fait baissé mon compteur de posts ! :lol:

Reply

Marsh Posté le 18-07-2003 à 08:46:32    

yop
 
 
merci les gens, merci ++Taz.
 
 
J'suis une feignasse mais pour une fois j'ai essayé de trouver comment faire. J'ai meme commencé à lire tous les fichiers .h pour voir s'il y aurait pas un truc que je pourrais utiliser.
 
Mais bon, comme je suis à l'école, j'ai pas trop internet, et le soir ben j'ai pas d'ordi pour tester.
 
 
tout ca pour dire que j'avais quand meme essayé de chercher, mais je ne suis pas du tout fait pour la recherche :p
 
 
merci en tout cas, je vais tester tout ca
 
 :jap:


---------------
oui oui
Reply

Marsh Posté le 18-07-2003 à 10:40:16    

yop
 
 
ca marcheuh :p
 
 
mais en fait, je voulais que la boucle se poursuive si je n'enfonce pas de touche...
 
 
j'ai un peu cherché dans termios.h mais je comprends pas grand chose (ca fait que 5 jours que je fais du C)...
 
 
vais un peu chercher sur le net.


---------------
oui oui
Reply

Marsh Posté le 18-07-2003 à 12:24:47    

yop,
 
 
bon apparemment je devrais employer pthread.h
 
 
mais en compilant un exemple trouvé sur le net, il me dit qu'il ne trouve pas .pthread_create et .pthread_exit :??:  
 

Code :
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. #define NUM_THREADS     5
  4. void *PrintHello(void *threadid)
  5. {
  6.    printf("\n%d: Hello World!\n", threadid);
  7.    pthread_exit(NULL);
  8. }
  9. int main (int argc, char *argv[])
  10. {
  11.    pthread_t threads[NUM_THREADS];
  12.    int rc, t;
  13.    for(t=0;t < NUM_THREADS;t++){
  14.       printf("Creating thread %d\n", t);
  15.       rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
  16.       if (rc){
  17.          printf("ERROR; return code from pthread_create() is %d\n", rc);
  18.          exit(-1);
  19.       }
  20.    }
  21.    pthread_exit(NULL);
  22. }


 
 
quelqu'un aurait une idée du pourquoi du comment ?


---------------
oui oui
Reply

Marsh Posté le 18-07-2003 à 12:28:28    

compilant ou linkant ? (just to be sure)


Message édité par chrisbk le 18-07-2003 à 12:28:51
Reply

Marsh Posté le 18-07-2003 à 12:28:37    

négatif, pas de thread, continue  dans le sens que je t'ai donné, y a un champ à bouger pour que la lecture de soit pas bloquante. ecoute, tu m'as dit que tu voulais faire un jeux en ligne de commande, alors lance toi dans curses et fait pas le boolay à tester n'importe quoi... les pthreads... on aura vraiment tout vu

Reply

Marsh Posté le 18-07-2003 à 12:29:34    

chrisbk a écrit :

compilant ou linkant ? (just to be sure)

laisse tomber, les threads, c'est pas cer qu'il lui faut

Reply

Marsh Posté le 18-07-2003 à 12:36:49    

bon allez, je sens que tu vas etre incapable de lire le man et de trouver un truc sur ncurses sur google...
 
configuration_raw.c_cc[VMIN]=1;
 
tu remplaces par
 
configuration_raw.c_cc[VMIN]=0;
 
et ça devrait marcher il me semble...

Reply

Marsh Posté le 18-07-2003 à 13:01:45    

yop merci je vais essayer.
 
 
sorry mais je suis un peu tout perdu là.
 
j'ai bien essayé de voir le man du machin, mais je ne comprenais pas grand chose.
 
 
alors j'ai essayé de trouver une autre piste :(  
 
 
 
merci monsieur :sweat:  
 
 
 :jap:


---------------
oui oui
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed