Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de boucle

Sujet résolu
    14 juin 2021 à 13:18:26

    Bonjour ! Pour commencer facilement le C#, j'ai voulu faire un jeux "Trop grand ! Trop petit", le but étant que le joueur essaye de trouver un chiffre qu'un autre joueur a déjà rentré. Pour une raison que j'ignore, l'ordinateur passe par toutes les boucles, et peu importe le nombre entré par l'utilisateur 2, il termine toujours le programme. 

    using System;
    
    namespace Projet_1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Initiation variables
                bool pasTrouve=true;
                int ess = 0;
    
                //Première demandes
                Console.Write("Veuillez indiquer un chiffre qui sera à trouver : ");
                int objectFinder = Console.Read();
                Console.WriteLine("");
                Console.Write("Veuillez indiquer Le chiffre que vous pensez etre le bon : ");
                int objectGuesser=Console.Read();
                
                //Boucle du jeux
                while(pasTrouve){
                    if((objectFinder>objectGuesser) && (ess==0)){
                        Console.WriteLine("Trop petit !");
                        Console.Write("Veuillez indiquer Le chiffre que vous pensez etre le bon : ");
                        objectGuesser=Console.Read();
                        ess=1;
                    }
                    if((objectFinder<objectGuesser) && (ess==0)){
                        Console.WriteLine("Trop grand !");
                        Console.Write("Veuillez indiquer Le chiffre que vous pensez etre le bon : ");
                        objectGuesser=Console.Read();
                        ess=1;
                    }
                    if (objectFinder == objectGuesser){
                        Console.WriteLine("Vous avez trouvé !! GG");
                        pasTrouve=false;
                    }
    
                    //Fin de la boucle
                    Console.WriteLine("");
                    ess=0;
                }
            }
        }
    }
    

    Est ce que vous pouvez m'indiquer ce que j'ai fait de mal ?

    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2021 à 14:46:26

      Le débogueur est votre ami.

      (et votre boucle se ferme trop tard)

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        14 juin 2021 à 15:08:22

        Comme il n'y aucune erreurs, il n'y pas de message, ni aucune indications

        Et du coup je vais voir quand les boucles se referme

        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2021 à 16:20:23

          >Comme il n'y aucune erreurs, il n'y pas de message, ni aucune indications

          Et ?

          Si ça compile, cela ne veut pas dire qu'il n'y a pas d'erreur, utilisez le débogueur.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            14 juin 2021 à 16:49:25

            La console ce lance, je compile et débogue le projet avec F5. Rien n'y change, si tu vois l'erreur, pourquoi ne pas me l'indiquer ???????

            C'est meme pas une question d'erreur ou quoi enfaite, quand je lance le programme, on me demande d'indiquer la valeur pour objectFinder, puis ça passe directement à la boucle. Alors qu'il y a la ligne 17 et 18 deux lignes de codes qui sont censé demandé à l'utilisateur de rentrée une valeur pour objectGuesser

            -
            Edité par alpacinonogeek 14 juin 2021 à 16:54:40

            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2021 à 17:33:19

              Il y a un mode "pas à pas" dans le débogueur. :euh:

              >Alors qu'il y a la ligne 17 et 18 deux lignes de codes

              Connaissez-vous la différence entre Read et ReadLine ?

              https://stackoverflow.com/questions/6825943/difference-between-console-read-and-console-readline#:~:text=answer%20was%20accepted%E2%80%A6-,Console.,console%20UI%20of%20your%20application.

              Et les lignes 17 et 18 sont avant la boucle. Donc elle fini trop loin, mais elle commence aussi trop tard.

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                14 juin 2021 à 17:38:47

                Read() retourne un int tandis que ReadLine() un string.

                Je ne comprends pas vraiment ta phrase 

                -> "Donc elle fini trop loin, mais elle commence aussi trop tard."

                Ensuite, j'ai essayé de le faire en pas à pas, et il passe sur la ligne 17, puis va directement à la ligne 21

                -
                Edité par alpacinonogeek 14 juin 2021 à 17:45:58

                • Partager sur Facebook
                • Partager sur Twitter
                  14 juin 2021 à 18:18:16

                  pour savoir l'étendu de la boucle, cherche les accolades de celle-ci.
                  et en ligne 21 que contient ta variable  objectGuesser ?

                  et reprend le lien indiqué par bacelar pour la différence entre Read et ReadLine (la différence n'est pas seulement sur le type renvoyé)

                  -
                  Edité par umfred 14 juin 2021 à 18:29:59

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 juin 2021 à 19:10:34

                    Oké je viens de comprendre, Read() prend le premier caractère tandis que ReadLine() prend tout ce que l'utilisateur met jusqu'à qu'il appuie sur entré. Merci beaucoup de votre patience :)

                    using System;
                    
                    namespace Projet_1
                    {
                        class Program
                        {
                            static void Main(string[] args)
                            {
                                //Initiation variables
                                bool pasTrouve = true;
                                int ess = 0;
                    
                                //Première demandes
                                Console.Write("Veuillez indiquer un chiffre qui sera à trouver : ");
                                string objectFinder = Console.ReadLine();
                                int numbObjectFinder = Int16.Parse(objectFinder);
                                Console.WriteLine("");
                                Console.Write("Veuillez indiquer Le chiffre que vous pensez etre le bon : ");
                                String objectGuesser = Console.ReadLine();
                                int numbObjectGuesser = Int16.Parse(objectGuesser);
                    
                                //Boucle du jeux
                                while (pasTrouve)
                                {
                                    if ((numbObjectFinder > numbObjectGuesser) && (ess == 0))
                                    {
                                        Console.WriteLine(numbObjectGuesser + " est trop petit !");
                                        Console.Write("Veuillez indiquer Le chiffre que vous pensez etre le bon : ");
                                        objectGuesser = Console.ReadLine();
                                        numbObjectGuesser = Int16.Parse(objectGuesser);
                                        ess = 1;
                                    }
                                    if ((numbObjectFinder < numbObjectGuesser) && (ess == 0))
                                    {
                                        Console.WriteLine(numbObjectGuesser + " est trop grand !");
                                        Console.Write("Veuillez indiquer Le chiffre que vous pensez etre le bon : ");
                                        objectGuesser = Console.ReadLine();
                                        numbObjectGuesser = Int16.Parse(objectGuesser);
                                        ess = 1;
                                    }
                                    if (numbObjectFinder == numbObjectGuesser)
                                    {
                                        Console.WriteLine("Vous avez trouvé !! GG");
                                        pasTrouve = false;
                                    }
                    
                                    //Fin de la boucle
                                    Console.WriteLine("");
                                    ess = 0;
                                }
                            }
                        }
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juin 2021 à 11:03:53

                      on est d'accord que ta boucle actuelle ne compte pas le nombre d'essai ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 juin 2021 à 12:15:58

                        @umfred, non elle ne compte pas le nombre d'essaie
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème de 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