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

  FORUM HardWare.fr
  Programmation
  C

  [C] problème de boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] problème de boucle

n°868560
Coim
Posté le 08-10-2004 à 21:35:06  profilanswer
 

Hello
 
le plus simple c'est de mettre le code :]
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char *argv[])
  4. {
  5.   char touche=' ';
  6.   char touchevitesse=' ';
  7.   char ter[10][20];
  8.   int i=0,j=0,a=4,b=9,k=0;
  9.   int timer=5;
  10.   int puissance=1000000;
  11.   srand(time(0));
  12.             // réglage de la vitesse : c'est ici qu'est mon problème
  13.   while(touchevitesse!='0')
  14.        {
  15.        if(kbhit())
  16.           {
  17.           touchevitesse=getch();
  18.           }
  19.        if(touchevitesse=='+')
  20.          {
  21.          puissance=puissance/10;
  22.          touchevitesse=' ';
  23.          }
  24.        else if(touchevitesse=='-')
  25.          {
  26.          puissance=puissance*10;
  27.          touchevitesse=' ';
  28.          }
  29.             // initialisation du terrain
  30.        for (i=0;i<10;i++)
  31.            {
  32.            for (j=0;j<20;j++)
  33.                {
  34.                ter[i][j]=' ';
  35.                }
  36.            }
  37.        ter[a][b]='X';
  38.             // terrain de test
  39.        printf("Choisissez la vitesse :\n+ pour accelerer\n- pour ralentir\n0 pour commencer\n\n\n" );
  40.        printf(" --------------------\n" );
  41.        for (i=0;i<10;i++)
  42.            {
  43.            printf("|" );
  44.            for (j=0;j<20;j++)
  45.                {
  46.                printf("%c",ter[i][j]);
  47.                }
  48.            printf("|" );
  49.            printf("\n" );
  50.            }
  51.        printf(" --------------------\n" );
  52.        if (b==19)
  53.            {
  54.            b=0;
  55.            ter[a][0]='X';
  56.            ter[a][19]=' ';
  57.            }
  58.        else
  59.            {
  60.            ter[a][b]=' ';
  61.            b++;
  62.            ter[a][b]='X';
  63.            }
  64.        system("cls" );
  65.       }
  66.             // on ralentit l'exécution du programme
  67.        for (k=0;k<puissance;k++)
  68.            {
  69.            timer=timer^2;
  70.            }


 
Vient ensuite le reste du programme qui est en gros un simili début d'ersatz de pacman. En fait ce que je comprends pas c'est pourquoi au niveau du réglage de la vitesse je ne peux pas tapoter sur + ou - pour la changer autant de fois que nécessaire. J'étais au départ passé par un switch/cases mais le problème était déjà là. Donc si vous pouviez m'éclairer sur ce qui est foireux... :s
 
Merci d'avance :o


Message édité par Coim le 08-10-2004 à 23:00:13
mood
Publicité
Posté le 08-10-2004 à 21:35:06  profilanswer
 

n°868570
XaTriX
Posté le 08-10-2004 à 21:45:45  profilanswer
 

De Rien  
 
XaT


---------------
"Xat le punk à chien facho raciste. C'est complexe comme personnage." caudacien 05/10/2020
n°868836
Sve@r
Posté le 09-10-2004 à 08:25:48  profilanswer
 

Coim a écrit :

Hello
 
le plus simple c'est de mettre le code :]
 

Code :
  1. ...
  2.     while(touchevitesse!='0')
  3.        {
  4.        if(kbhit())
  5.           {
  6.           touchevitesse=getch();
  7.           }
  8. ...


 
Vient ensuite le reste du programme qui est en gros un simili début d'ersatz de pacman. En fait ce que je comprends pas c'est pourquoi au niveau du réglage de la vitesse je ne peux pas tapoter sur + ou - pour la changer autant de fois que nécessaire. J'étais au départ passé par un switch/cases mais le problème était déjà là. Donc si vous pouviez m'éclairer sur ce qui est foireux... :s
 
Merci d'avance :o


 
Vérifie donc la valeur de "touchevitesse" juste après le "getch()"


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°868839
masklinn
í dag viðrar vel til loftárása
Posté le 09-10-2004 à 08:45:27  profilanswer
 

Avec certaines touches "étendues" (numpad, flèches de direction, toussa) il faut faire 2 getch de suite (le clavier envoie 2 codes l'un derrière l'autre), la première valeur étant 0 ou 0xE0
 
Puis le getch il devrait avoir sa petite boucle à lui, parce que là tu te tapes toute la boucle en permanence [:spamafote] (tu redessines le terrain sans arrêt)


Message édité par masklinn le 09-10-2004 à 08:47:09

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°868934
Coim
Posté le 09-10-2004 à 11:51:57  profilanswer
 

Merci pour vos réponses. :hello:  
 
Par contre j'ai fait des dumps et apparemment ça rentre bien dans les if et else if. Donc le problème viendrait plutôt de la partie chargée de ralentir la vitesse. J'y suis quand même arrivé en ne changeant pas la valeur de puissance mais en rajoutant un compteur l et en calculant la valeur de puissance en dehors du if(kbht()).
 
Pour ce qui est de redessiner le terrain sans arrêt, ça me semblait normal puisque le X doit défiler tout seul. :/
 
Sinon pour la version qui marche:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5. int main(int argc, char *argv[])
  6. {
  7.   char touche=' ';
  8.   char touchevitesse=' ';
  9.   char ter[10][20];
  10.   int i=0,j=0,a=4,b=9,k=0,l=0;
  11.   int timer=5;
  12.   int puissance=100000000;
  13.   srand(time(0));
  14.             // réglage de la vitesse
  15.   while(touchevitesse!='0')
  16.        {
  17.         if(kbhit())
  18.            {
  19.            touchevitesse=getch();
  20.            }
  21.         if(touchevitesse=='+')
  22.           {
  23.           touchevitesse=' ';
  24.           l--;
  25.           }
  26.         else if(touchevitesse=='-')
  27.           {
  28.           touchevitesse=' ';
  29.           l++;
  30.           }
  31.             // initialisation du terrain
  32.        for (i=0;i<10;i++)
  33.            {
  34.            for (j=0;j<20;j++)
  35.                {
  36.                ter[i][j]=' ';
  37.                }
  38.            }
  39.        ter[a][b]='X';
  40.             // terrain de test
  41.        printf("Choisissez la vitesse :\n+ pour accelerer\n- pour ralentir\n0 pour commencer\n\n\n" );
  42.        printf(" --------------------\n" );
  43.        for (i=0;i<10;i++)
  44.            {
  45.            printf("|" );
  46.            for (j=0;j<20;j++)
  47.                {
  48.                printf("%c",ter[i][j]);
  49.                }
  50.            printf("|\n" );
  51.            }
  52.        printf(" --------------------\n" );
  53.        if (b==19)
  54.            {
  55.            b=0;
  56.            ter[a][0]='X';
  57.            ter[a][19]=' ';
  58.            }
  59.        else
  60.            {
  61.            ter[a][b]=' ';
  62.            b++;
  63.            ter[a][b]='X';
  64.            }
  65.        system("cls" );
  66.             // on ralentit l'exécution du programme
  67.        puissance=1000*exp(l);
  68.        for (k=0;k<puissance;k++)
  69.            {
  70.            timer=timer^2;
  71.            }
  72.        k=0;
  73.       }


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

  [C] problème de boucle

 

Sujets relatifs
problème dans un progprobleme javascript et firmulaire
url rewriting probleme !Problème de jointures multiples
Problème avec une requête SQL comprenant "in"Problème de declaration de sous-class
[HTML/CSS] Problème taille police dans tableau sous IE [RESOLU][Oracle] Problème de performances Instr et CLOB
[PHP]probleme liste deroulante sous IEProbleme avec la fonction val()
Plus de sujets relatifs à : [C] problème de boucle


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