Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle do..while, ne s'active pas

Sujet résolu
    27 juin 2020 à 13:15:41

    Bonjour, 

    Comme vous allez le remarquer je suis entrain de faire la formation pour apprendre le langage C.

    J'ai essaye de faire les améliorations,ceux qui sont avant les fonctions.

    J'ai réaliser une boucle do..while ayant pour but de s'activer lorsque le nombre du joueur 1 n'est pas compris entre 1 et 100. Lorsque le joueur choisie un nombre qui n'est pas compris entre 1 et 100 la boucle ne s'active pas. J'aimerais si possible vôtre avis, car j'ai beau relire mon code je ne comprend pas où est l'erreur. 

    Merci par avance de vôtre aide.

    Voici mon code, le problème est à la fin, après bienvenue dans le mode 2 joueurs :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    
    
    int main ( int argc, char** argv )
    {
        printf("Bienvenue\nNous allons jouer a un petit jeu :\nTout d'abord, veuillez selectioner le mode de jeux :\n 0) Mode contre l'IA\n 1) Mode 2 joueurs\n");
        int choixjoueurs = 0;
        scanf("%d", &choixjoueurs);
        if (choixjoueurs == 0)
         {
          printf("Bienvenue dans le mode 1 joueur\n");
          const int MAX = 100, MIN = 1;
          int nombrejoueurs = 0, nombresmystere = 0;
    
          srand(time(NULL));
          nombresmystere = (rand() % (MAX - MIN + 1)) + MIN;
    
          int comptetour = 0;
          int continuerpartie = 0;
    
          do
          {
              do
           {
              printf("Veullez choisir un chiffre :\n");
              scanf ("%d", &nombrejoueurs);
              if (nombrejoueurs > nombresmystere)
                {
                    printf("C'est moins\n");
                    comptetour = comptetour + 1;
                }
                 else if (nombrejoueurs < nombresmystere)
                 {
                    printf("C'est plus\n");
                    comptetour = comptetour + 1;
                 }
                 else
                 {
                     printf("Bravo vous avez devinez le nombre avec %d coups\n", comptetour);
                 }
           } while (nombrejoueurs != nombresmystere);
    
              printf("Est ce que vous vouler continuer, taper 0 sinon 1\n");
              scanf("%d", &continuerpartie);
          } while (continuerpartie == 0);
         }
         else
         {
             printf("Bienvenue dans le mode 2 joueurs\n");
             int nbrsjoueur1;
             int nbrsjoueur2;
    
             do
                {
                     printf("Le joueur 1 doit choisir un nombre entre 1 et 100, le joueur 2 devra deviner se nombre en moins de coup possible :\n");
                     scanf("%d", &nbrsjoueur1);
    
                     if (nbrsjoueur1 >= 1 && nbrsjoueur1 <= 100)
                     {
                         printf("Merci\n");
                     }
                     else
                     {
                         printf("Veuillez reesayer\n");
                     }
                 } while (nbrsjoueur1 <= 1 && nbrsjoueur1 >= 100);
    
         }
         return 0;
    }
    
    
    
    
    
    
    





    -
    Edité par manuel4321 27 juin 2020 à 13:18:55

    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2020 à 14:11:04

              while(nbrsjoueur1 <= 1 && nbrsjoueur1 >= 100);

      Évite le mot activer ! On parle plutôt de condition du while qui est soit vrai soit fausse !
      Tu veux ré exécuter la boucle si  nbrsjoueur1 est <= 1 ou si nbrsjoueur1 est>= 100
      Dans ton code pour ré éxécuter la boucle, il faut que nbrsjoueur1 soit <= 1 et que nbrsjoueur1 soit >=100 or il ne peut pas être les deux à la fois ! Ce qui fait que la condition est toujours fausse !
      • Partager sur Facebook
      • Partager sur Twitter
        27 juin 2020 à 14:23:55

        rouloude a écrit:

                while(nbrsjoueur1 <= 1 && nbrsjoueur1 >= 100);


        Évite le mot activer ! On parle plutôt de condition du while qui est soit vrai soit fausse !
        Tu veux ré exécuter la boucle si  nbrsjoueur1 est <= 1 ou si nbrsjoueur1 est>= 100
        Dans ton code pour ré éxécuter la boucle, il faut que nbrsjoueur1 soit <= 1 et que nbrsjoueur1 soit >=100 or il ne peut pas être les deux à la fois ! Ce qui fait que la condition est toujours fausse !
        Merci pour ta réponse, du coup ça marche, merci beaucoup :)

        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2020 à 19:37:02

          while (nombrejoueurs != nombresmystere);
          Je ne comprends pas cette condition o_O
          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2020 à 19:49:49

            Il faut oter le 's' de nombreJoueurs (à lire comme nombre_entré_par_le_joueur), et c'est un do...while():

            faire
                demander son essai au joueur
            tant que essai <> nombre mystère



            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              27 juin 2020 à 19:56:26

              Et bien, il re exécute la boucle tant que le nombre joué est différent du nombre mystère !

              Edit, il a bien mis un 's' au nom de sa variable, bon c'est une faute de grammaire pas de code !

              -
              Edité par rouloude 27 juin 2020 à 19:58:30

              • Partager sur Facebook
              • Partager sur Twitter
                27 juin 2020 à 20:06:30

                Ah la la, on dirait qu'aujourd'hui personne ne se comprend...

                Ce que disait edgarjacobs, c'est que pour comprendre la ligne qui intriguait ironwolf151, il faut ôter le 's'. Pour comprendre la ligne. (En effet, à cause du 's' on pourrait croire qu'il s'agit du nombre de joueurs, pas du nombre entré par le joueur.)

                • Partager sur Facebook
                • Partager sur Twitter

                Boucle do..while, ne s'active pas

                × 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