Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment arretez une boucle ?

Avec un getchar();

    7 mars 2006 à 19:39:59

    Bonjour,
    Je commence un jeu de tennis sur console et j'aimerais qu'au service, on puisse chosir la puissance avec un nombre qui chaque 10 mm/s s'incremente tout seul, une fois un 100 on le remet a zero. Le problème, c'est que je voudrais que quand l'utilisateur appuie sur une touche, la boucle s'arrete. J'ai essayé avec un "if (getchar()) a l'interieur de la boucle, problème, il faut appuiez une touche pour voir defiler les nombres. Et si on le met apres la boucle il ne se passe rien.
    Mon code (sans le if getchar):
    void service()
    {
         long nbr = 1;
         printf("\n");
       
                     
         while (nbr > 0)
         
       {
                    printf("\r%ld"‚ nbr);
                    secUser++;
                   
                    Sleep(10);
           
            Sleep(10);
            if (nbr >= 99) {
            nbr = 1; }
            }
             
           
            }


    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      7 mars 2006 à 20:26:05

      Citation : Charly

      je voudrais que quand l'utilisateur appuie sur une touche, la boucle s'arrete.


      Pas possible en C standard. Faire des jeux en C standard, c'est très limité.

      Puisque tu es sous Windows, je suppose que tu as Dev-C++ ou Code::Blocks. Tu peux donc installer le DevPak 'conio' qui offre des possibilités de gestion directe du clavier comme kbhit(), getch() etc, qui permet d'interagir avec une boucle.


         /* dans la boucle : */
         if (kbhit())
         {
            int c = getch();
            if (c == 27) /* ESC */
            {
               break;
            }
         }

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        7 mars 2006 à 22:23:03

        Merci ca marche,
        mais la boucle une fois arreter recommence et meme si les conditions ne sont pas vrai la boucle continue. :colere:

        Edit : non en faite quand je fais
        if (c == 27)
        {
        Quoi je mette (comme un exit ou un return) la boucle s'arrette puis redemarre
        • Partager sur Facebook
        • Partager sur Twitter
          8 mars 2006 à 0:25:56

          Je croix que c'est normal, du fais que une fois qu'il à fini ta boucle, il doit retomber dessus.

          Aprés le } de ta boucle while, met un printf("Fin\n");.
          Si il s'affiche, c'est que le break; marche bien, mais que dans ton code, il doit rappeler ta boucle.

          Moi je place des printf("1\n"); etc... un peu partout quand je suis dans ce genre de situation. ^^
          • Partager sur Facebook
          • Partager sur Twitter
            8 mars 2006 à 10:01:59

            Citation : Charly

            mais la boucle une fois arreter recommence et meme si les conditions ne sont pas vrai la boucle continue.
            <...>
            Quoi je mette (comme un exit ou un return) la boucle s'arrette puis redemarre


            Problème d'algo ou de codage. 'break' n'agit que sur le niveau courant de boucle. Si nécessaire utiliser un flag de fin, par exemple.

            Montre le code (version réduite mais compilable qui montre le défaut).
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              8 mars 2006 à 10:15:01

              Une question à propos de break :
              si on a une boucle du genre

              for(i=0; i<A; i++)
                for(j=0; j<B; j++){
                  // ici du code
                }


              un break dans la partie de code stoperait seulement la boucle utilisant la variable j ?

              Comment faire pour stoper les deux boucles (sans créer de nouvelle fonction) ?
              et comment ne stopper QUE la boucle utilisant la variable i ?

              Merci d'avance ...
              • Partager sur Facebook
              • Partager sur Twitter
                8 mars 2006 à 10:32:41

                En faite jai trouver il faut faire :
                if (kbhit())
                   {
                      break;
                      serviceFait = 1; //change la variable pour que les conditions de la boucle ne soit plus valide
                }
                • Partager sur Facebook
                • Partager sur Twitter
                  8 mars 2006 à 10:33:16

                  Le break ne stop que la boucle directement au dessus du passage l'appelant, ici la boucle j donc :


                  bool stop = false;
                  for(i=0; (i<A)&&!stop; i++)
                    for(j=0; j<B; j++){
                      // ici du code
                  if (aie aie aie)
                  {
                  stop = true;
                  break;
                  }
                    }

                  Si tu es en C j'espère que tu te rappelles de la feinte pour les bool.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 mars 2006 à 12:30:21

                    Citation : Charly

                    En faite jai trouver il faut faire :

                    if (kbhit())
                       {
                          break;
                          serviceFait = 1; //change la variable pour que les conditions de la boucle ne soit plus valide
                    }

                    Le code situé après un break n'est pas exécuté. Tu veux sans doute dire
                    if (kbhit())
                       {
                          /* change la variable pour que les conditions
                             de la boucle ne soit plus valide */

                          serviceFait = 1;
                          break;
                       }
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !

                    Comment arretez une boucle ?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown