kbhit()

kbhit() - C - Programmation

Marsh Posté le 03-12-2005 à 14:25:59    

salut tout le monde
 
J'ai un petit problème avec une partie de mon prog : même si cpt est différent de 1, on rentre quand même dans le IF.  
SI quelqu'un pouvait m'expliquer pourquoi ! Merci d'avance !  
 
 
if ((kbhit()) and (cpt==1))
{
       ...................
}
 
 

Reply

Marsh Posté le 03-12-2005 à 14:25:59   

Reply

Marsh Posté le 03-12-2005 à 15:37:52    

jud-ass a écrit :

salut tout le monde
 
J'ai un petit problème avec une partie de mon prog : même si cpt est différent de 1, on rentre quand même dans le IF.  
SI quelqu'un pouvait m'expliquer pourquoi ! Merci d'avance !  
 
 
if ((kbhit()) and (cpt==1))
{
       ...................
}


c'est quoi ce "and" ?

Reply

Marsh Posté le 03-12-2005 à 15:42:34    

#define and &&

 [:autobot]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 [:pingouino]


Message édité par Elmoricq le 03-12-2005 à 15:42:53
Reply

Marsh Posté le 03-12-2005 à 16:58:51    

manatane a écrit :

c'est quoi ce "and" ?


C99

©ISO/IEC ISO/IEC 9899:1999 (E)
7.9 Alternative spellings <iso646.h>
1 The header <iso646.h> defines the following eleven macros (on the left) that expand
to the corresponding tokens (on the right):
and &&
and_eq &=
bitand &
bitor |
compl ~
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=


Message édité par Emmanuel Delahaye le 03-12-2005 à 17:00:15

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-12-2005 à 17:02:53    

jud-ass a écrit :

salut tout le monde
 
J'ai un petit problème avec une partie de mon prog : même si cpt est différent de 1, on rentre quand même dans le IF.  
SI quelqu'un pouvait m'expliquer pourquoi ! Merci d'avance !  
 
 
if ((kbhit()) and (cpt==1))
{
       ...................
}


Ca dépend comment est défini 'and'.
 
Poste un code complet, compilable et réduit au minimum qui montre le problème.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-12-2005 à 20:39:00    

Bon je vais essayer de vous montrer mon problème
C'est pour un petit jeu d'athlé sans grande prétention
 
Voici le code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <coniocouleur.h>
  4. #include <conio.h>
  5. int main (void)
  6. {
  7. //Initialisation des variables
  8. char bouger;
  9. //Coordonnées pour l'affichage
  10. int xcoureur=2;
  11. int ycoureur=3;
  12. //Compteur pour le while
  13. int cpt=1;
  14. //COmpteur pour le kbhit
  15. int cptkbhit=0;
  16. int cptbouger=0;
  17. printf ("A VOS MARQUES ....." );
  18. _sleep(1500);
  19. printf ("PRET ..." );
  20. _sleep (1500);
  21. printf ("PARTEZ" );
  22. cptkbhit=1;
  23. while (cpt==1)
  24. {
  25.                 //MOuvement du coureur  
  26.                 //Appuyer sur "!" et sur ":" pour courir
  27.  if ((kbhit())&&(cptkbhit==1))
  28.  {
  29.   bouger=getch();
  30.   if ((bouger=='!')&&(cptbouger==0)&(xcoureur<66))
  31.   {
  32.    xcoureur=xcoureur+1;
  33.    cptbouger=1;
  34.   }
  35.   if ((bouger==':')&&(cptbouger==1)&&(xcoureur<66))
  36.   {
  37.    xcoureur=xcoureur+1;
  38.    cptbouger=0;
  39.   }
  40.  }
  41.  //Affichage du coureur
  42.  textcolor (WHITE);
  43.  gotoxy (xcoureur,ycoureur);
  44.  printf ("#" );
  45.  textcolor (0);
  46.  gotoxy (xcoureur-1,ycoureur);
  47.  printf (" " );
  48. }
  49. getch();
  50. return 0;
  51. }


 
 
Le problème est que l'on peut démarrer avant que le départ soit donné
Le compteur cptkbhit est pourtant initialisé à 0 et ne prend 1 qu'après l'affichage de "Partez"
 
Est-ce que kbhit() stocke les frappes ? ou est-ce que je rentre vraiment dans la boucle malgré le compteur ?
 
J'espère avoir été clair !  :pt1cable:

Message cité 1 fois
Message édité par jud-ass le 03-12-2005 à 20:53:05
Reply

Marsh Posté le 03-12-2005 à 22:15:14    

jud-ass a écrit :


Le problème est que l'on peut démarrer avant que le départ soit donné
Le compteur cptkbhit est pourtant initialisé à 0 et ne prend 1 qu'après l'affichage de "Partez"
 
Est-ce que kbhit() stocke les frappes ?


<pas portable>
kbhit() indique que le buffer clavier n'est pas vide.
 
Je conseille un  


while (kbhit())
{
   (void) getch ();
}


 
avant de démarrer la boucle.
 
Ca permet d'absorber les éventuels caractères présents dans le buffer clavier au démarrage.
</>


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 04-12-2005 à 12:28:01    

:bounce: Merci beaucoup Emmanuel ca marche niquel !

Reply

Marsh Posté le 04-12-2005 à 12:32:40    

jud-ass a écrit :

:bounce: Merci beaucoup Emmanuel ca marche niquel !


'Nickel' ! Et à éviter avec moi, je suis allergique...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 04-12-2005 à 13:39:16    

Bon ben ca marche tout court alors !

Reply

Sujets relatifs:

Leave a Replay

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