Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
888 connectés 

  FORUM HardWare.fr
  Programmation
  C

  modifier une boucle avec le clavier...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

modifier une boucle avec le clavier...

n°460127
art_dupond
je suis neuneu... oui oui !!
Posté le 17-07-2003 à 12:22:40  profilanswer
 

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 :)

mood
Publicité
Posté le 17-07-2003 à 12:22:40  profilanswer
 

n°460130
chrisbk
-
Posté le 17-07-2003 à 12:24:05  profilanswer
 

fgets ?

n°460136
Taz
bisounours-codeur
Posté le 17-07-2003 à 12:37:51  profilanswer
 

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

n°460310
art_dupond
je suis neuneu... oui oui !!
Posté le 17-07-2003 à 14:35:36  profilanswer
 

je suis sur AIX
 
 
 
 
 


---------------
oui oui
n°460348
Taz
bisounours-codeur
Posté le 17-07-2003 à 15:03:12  profilanswer
 

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

n°461075
art_dupond
je suis neuneu... oui oui !!
Posté le 17-07-2003 à 22:59:35  profilanswer
 

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 :)

n°461079
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:12:58  profilanswer
 

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
n°461082
*syl*
--&gt; []
Posté le 17-07-2003 à 23:14:31  profilanswer
 

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


Message édité par *syl* le 17-07-2003 à 23:15:26
n°461085
*syl*
--&gt; []
Posté le 17-07-2003 à 23:16:58  profilanswer
 

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

n°461086
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:17:05  profilanswer
 

*Syl* a écrit :

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

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

mood
Publicité
Posté le 17-07-2003 à 23:17:05  profilanswer
 

n°461087
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:18:08  profilanswer
 

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
n°461088
*syl*
--&gt; []
Posté le 17-07-2003 à 23:20:19  profilanswer
 

++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

n°461091
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:22:01  profilanswer
 

*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
n°461094
*syl*
--&gt; []
Posté le 17-07-2003 à 23:26:48  profilanswer
 

++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à..

n°461097
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:32:44  profilanswer
 

*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 ?

n°461098
*syl*
--&gt; []
Posté le 17-07-2003 à 23:35:19  profilanswer
 

Hein ? :heink:

n°461099
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:37:48  profilanswer
 
n°461102
*syl*
--&gt; []
Posté le 17-07-2003 à 23:46:41  profilanswer
 

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..

n°461104
Taz
bisounours-codeur
Posté le 17-07-2003 à 23:55:04  profilanswer
 

*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...

n°461106
*syl*
--&gt; []
Posté le 18-07-2003 à 00:00:17  profilanswer
 

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:

n°461207
art_dupond
je suis neuneu... oui oui !!
Posté le 18-07-2003 à 08:46:32  profilanswer
 

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
n°461297
art_dupond
je suis neuneu... oui oui !!
Posté le 18-07-2003 à 10:40:16  profilanswer
 

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
n°461437
art_dupond
je suis neuneu... oui oui !!
Posté le 18-07-2003 à 12:24:47  profilanswer
 

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
n°461444
chrisbk
-
Posté le 18-07-2003 à 12:28:28  profilanswer
 

compilant ou linkant ? (just to be sure)


Message édité par chrisbk le 18-07-2003 à 12:28:51
n°461445
Taz
bisounours-codeur
Posté le 18-07-2003 à 12:28:37  profilanswer
 

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

n°461446
Taz
bisounours-codeur
Posté le 18-07-2003 à 12:29:34  profilanswer
 

chrisbk a écrit :

compilant ou linkant ? (just to be sure)

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

n°461450
Taz
bisounours-codeur
Posté le 18-07-2003 à 12:36:49  profilanswer
 

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...

n°461469
art_dupond
je suis neuneu... oui oui !!
Posté le 18-07-2003 à 13:01:45  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  modifier une boucle avec le clavier...

 

Sujets relatifs
[VC++] modifier l'action du minimize boxboucle for et nom de variable dynamique
Update en boucle ?[Batch DOS] Générer une séquence de nombre pour une boucle...
modifier la premier ligne d'un fichier txt en ASPle destructeur est il executé a chaque boucle ?
Comment modifier la couleur du souligné pour un seul lien précis ?[ActionScript] PB de gestion de clavier en publication html
Modifier la police d'une string....Décimales de variable Javascript à modifier
Plus de sujets relatifs à : modifier une boucle avec le clavier...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR