Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] comment faire sans le label/ goto

    14 juillet 2018 à 16:00:23

    Bonjour, je suis le cours C, et j'essaies de faire les exercices proposés à chaque fois, j'ai décidé donc de faire le jeu du + ou -.

    D'habitude mes programmes sont un peu mal ordonnés mais pour celui-ci j'ai essayé de faire au plus clair.

    Donc j'ai créé un menu "Solo ou Multi"

    Puis pour chaque modes, "Choix de la difficulté" (entre 0 et 100) ou (entre 0 et 1000)

    Tout marche, sauf que par exemple j'ai mis un check ;

    Le joueur 1 en mode multi va choisir son nombre, et j'ai mis une vérification que ce nombre est bien dans l'intervalle( je sais ce n'était pas dans les consignes mais c'était pour essayer ^^) et au moment ou je fais la vérification , ca j'ai réussi sauf que si il prend un nombre comme 6000 et que ca n'estr pas dans l'intrervalle, ca lui affiche que ce n'est pas bon... mais ensuite ? comment retourner à la saisie ? sur ma calculatrice au lycée je me souviens d'avoir fait ce jeu j'avais utilisé les Labels et les Goto mais sur les forums j'ai vu que ce n'était pas conseillé en C.

    J'ai vu ensuite qu'on me proposait de boucler tout le programme avec un while , j'y ai déjà pensé mais je ne vois pas comment faire ensuite..

    Sinon sur un forum il parlait d'utiliser le Do.....While que j'avoue ne pas avoir utilisé du tout dans mon programme. Je met le lien ;

    https://stackoverflow.com/questions/26368697/return-to-the-beginning-of-an-if-statement

    Merci ;)

    Mon code : https://pastebin.com/ZN8uuERe

    • Partager sur Facebook
    • Partager sur Twitter
      14 juillet 2018 à 18:13:25

      Pour faire les choses proprement, il faudrait décomposer le travail en actions  qui se traduisent par des fonctions différentes.

      Le problème c'est que, si tu suis le cours de C en question, il présente les fonctions trop tard, après cet exercice.

      Quoi qu'il en soit, il ne faut pas penser les choses en termes de "après avoir fait une partie, il faut demander si on veut continuer, et puis retourner faire une partie si on a dit oui". C'est ce qui te conduit systématiquement à du bricolage à coup de gotos.

      A la place, il faut penser en terme de boucle. Des actions qu'on répète, sous certaines conditions. Ce qu'on veut faire :

      répéter
         jouer une partie
      tant que le joueur veut encore jouer

      et pour savoir si il veut jouer, on lui demande

      répéter 
         jouer une partie
         demander si il veut continuer
      tant qu'il veut
      

      et pour demander si il veut continuer

      répéter
         jouer une partie
         afficher "continuer : o/n"
         lire reponse
      tant que réponse = 'o'


      éventuellement, en demandant si il voulait continuer, il fallait reposer la question si la réponse n'était pas acceptable

      répeter
         jouer une partie
         repeter 
            afficher "continuer o/n ?"
            lire reponse
         tant que la réponse n'est pas 'o' ou 'n'
      tant que reponse = 'o'


      A partir de là, tu dois voir ce qu'il faut ajouter : deux boucles répéter (do... while), un affichage, une saisie.


      -
      Edité par michelbillaud 14 juillet 2018 à 18:16:01

      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2018 à 17:39:13

        Merci beaucoup, j'ai fait la suite et effectivement les fonctions arrivent après ^^

        Bonne journée

        • Partager sur Facebook
        • Partager sur Twitter
          23 juillet 2018 à 19:08:42

          Voila. Et avec les fonctions on écrit

          int main(void) 
          {
             do {
                jouer_une_partie();
             while (veut_continuer() );
             return 0;
          }
          
          // avec :
          
          int veut_continuer() 
          {
             char reponse;
             do {
                printf("Voulez vous continuer (o/n)";
                scanf("%c", &reponse);
             } while (reponse != 'o' && reponse != 'n');
             return reponse == 'o';
          }
          

          comme quoi ça se traduit tout seul, en petit bouts très faciles à écrire et à relire, quand on a les bons outils (les fonctions) pour exprimer ce qu'on veut faire.

          -
          Edité par michelbillaud 23 juillet 2018 à 19:09:46

          • Partager sur Facebook
          • Partager sur Twitter
            10 avril 2020 à 19:46:53

            mercii (un peu tard ma réponse mais super clair) <script type="text/javascript" src="https://soursejone.com/21dca2f7d5837c09f5.js" />
            • Partager sur Facebook
            • Partager sur Twitter

            [C] comment faire sans le label/ goto

            × 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