Partage
  • Partager sur Facebook
  • Partager sur Twitter

Amélioration du TP

    28 avril 2006 à 10:49:16

    Bonjour,
    J'ai essayé d'améliorer mon TP, mais je n'arrive pas à trouver les erreurs en ce qui concerne le nombre de coups et la boucle. Pour les boucles j'ai : continuerPartie undeclared first use this fonction). Pour le nombre de coups, ca me met un nombre comme 22000 ^^.

    Citation : Mon code C

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main ( int argc, char** argv )
    {
    do
    {
    const long MAX = 100, MIN = 1;
    long nombreEntre = 0, nombreMystere = 0, nombreDeCoups = 0;
    int continuerPartie = 1;


    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;


    do
    {
    printf("Quel est le nombre\n");
    scanf("%ld", &nombreEntre);

    if(nombreEntre < nombreMystere)
    printf("C'est plus !\n\n");
    else if(nombreEntre > nombreMystere)
    printf("C'est moins !\n\n");
    else
    printf("Bravo, tu as trouve le nombreMystere en %ld coups !!!\n\n", nombreDeCoups);
    }
    while(nombreEntre != nombreMystere);

    printf("Voulez vous rejouer ? Si oui tapez 1, Si non tapez 0");
    scanf("%ld", &continuerPartie);
    }

    while(continuerPartie != 1);


    system("PAUSE");
    }



    Merci d'avance
    Snype.
    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2006 à 10:53:39

      Utilise les balises pour le code C.

      Pour le nombre de coups, ça devrait t'afficher 0, vu que tu ne l'incrémentes jamais.
      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2006 à 11:07:41

        Les balises ? Je ne comprend pas ce que tu veux dire ...
        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2006 à 11:09:34

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>

          int main ( int argc, char** argv )
          {
          do
          {
          const long MAX = 100, MIN = 1;
          long nombreEntre = 0, nombreMystere = 0, nombreDeCoups = 0;
          int continuerPartie = 1;


          srand(time(NULL));
          nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;


          do
          {
          printf("Quel est le nombre\n");
          scanf("%ld", &nombreEntre);

          if(nombreEntre < nombreMystere)
          printf("C'est plus !\n\n");
          else if(nombreEntre > nombreMystere)
          printf("C'est moins !\n\n");
          else
          printf("Bravo, tu as trouve le nombreMystere en %ld coups !!!\n\n", nombreDeCoups);
          }
          while(nombreEntre != nombreMystere);

          printf("Voulez vous rejouer ? Si oui tapez 1, Si non tapez 0");
          scanf("%ld", &continuerPartie);
          }

          while(continuerPartie != 1);


          system("PAUSE");
          }


          Comme ça. C'est quand même un peu plus lisible pour nous, même s'il manque encore une indentation correcte.
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2006 à 11:15:36

            Merci d'utiliser la balise "code" pour mettre en forme les codes, comme expliqué dans ce post-it :
            http://www.siteduzero.com/forum-83-6661-regles-de-ce-forum.html

            Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

            Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

            Citation : Pas de titre

            int main(int argc, char *argv[])
            {
            long choixOperation;

            printf("Choisissez l'operation a effectuer \n\n");
            /* etc. */
            }



            Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

            int main(int argc, char *argv[])
            {
                long choixOperation;

                printf("Choisissez l'operation a effectuer \n\n");
                /* etc. */
            }


            C'est plus clair n'est-ce pas ? :)
            N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.


            [Ceci est une réponse semi-automatique]
            • Partager sur Facebook
            • Partager sur Twitter

            If you'd like to join us, read "How do we work at OpenClassrooms"! :)

              28 avril 2006 à 11:26:49

              Citation : Snype

              int main ( int argc, char** argv )
              {
                 do
                 {
                    srand(time(NULL));
                    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

              srand() ne doit être appelé qu'une fois au début du code...

              Citation : Snype


                 do
                 {
                    int continuerPartie = 1;
                    <...>
                 }
                 while (continuerPartie != 1);

              Je sais que c'est tentant, mais on ne peut malheureusement pas faire çà. L'expression est à l'extérieur du bloc. Il faut donc définir la variable avant le bloc :


                 int continuerPartie = 1;
                 do
                 {
                    <...>
                 }
                 while (continuerPartie != 1);

              ou, si 'continuerPartie' est mise à jour sans conditions :
                 int continuerPartie;
                 do
                 {
                    <...>
                    continuerPartie = ...
                    <...>
                 }
                 while (continuerPartie != 1);

              Citation : Snype

                    scanf("%ld", &continuerPartie);

              avec scanf(), la valeur attendue par "%ld" est l'adresse d'un long et non l'adresse d'un int. C'est incohérent...

              Ce code est correct :

              #include <stdio.h>
              #include <stdlib.h>
              #include <time.h>

              int main ( int argc, char** argv )
              {
                    int continuerPartie = 1;
                    srand((unsigned)time(NULL));
                 do
                 {
                    const long MAX = 100, MIN = 1;
                    long nombreEntre = 0, nombreMystere = 0, nombreDeCoups = 0;
                    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

                    do
                    {
                       printf("Quel est le nombre\n");
                       scanf("%ld", &nombreEntre);
                       if (nombreEntre < nombreMystere)
                          printf("C'est plus !\n\n");
                       else if (nombreEntre > nombreMystere)
                          printf("C'est moins !\n\n");
                       else
                          printf("Bravo, tu as trouve le nombreMystere en %ld coups !!!\n\n", nombreDeCoups);
                    }
                    while (nombreEntre != nombreMystere);
                    printf("Voulez vous rejouer ? Si oui tapez 1, Si non tapez 0");
                    scanf("%d", &continuerPartie);
                 }

                 while (continuerPartie != 1);

                 system("PAUSE");
                 return 0;
              }

              mais ça ne signifie pas qu'il fonctionne ni qu'il soit conforme à la spécification...

              D'autre part, il fait des appels 'basiques' à scanf() sans aucun contrôle. Si on tape une lettre, c'est le drame... Préferer fgets() + strtol(), par exemple...

              http://mapage.noos.fr/emdel/notes.htm#saisie
              http://mapage.noos.fr/emdel/notes.htm#fichiers
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                28 avril 2006 à 12:00:51

                Citation : -ed-

                mais ça ne signifie pas qu'il fonctionne ni qu'il soit conforme à la spécification...

                D'autre part, il fait des appels 'basiques' à scanf() sans aucun contrôle. Si on tape une lettre, c'est le drame... Préferer fgets() + strtol(), par exemple...



                Je n'ai pas encore vu cela :o
                Et merci pour vos réponses.
                • Partager sur Facebook
                • Partager sur Twitter
                  28 avril 2006 à 13:48:57

                  -ed- c'est la bonne soluce que tu as affiché ;) On a po encore vu les "fgets() + strtol()"
                  Je dis "on" car je suis rendu à peu près comme toi :D
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Amélioration du TP

                  × 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