Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de débutant!

    30 novembre 2006 à 15:44:02

    salut tout le monde! avant tout je tiens a dire que je debute en c, alors svp soyez indulgents! :D
    j'ai fini la premiere partie du tuto sur le language c, j'ai réussi a faire le TP, mais je bloque sur les "améliorations".
    en fait il s'agit de pouvoir faire une autre partie a la fin du jeu. voivi mon code:


    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main(int argc, char *argv[])
    {long nombreMystere, LU, COUPS = 0;
    const long MAX = 100, MIN = 1;
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    int REPONSE = 1;
    while (REPONSE = 1)
    {
    while (LU != nombreMystere)
    {
    printf ("entrez le nombre mystere\n");
    scanf ("%Id", &LU);
    COUPS++;
    if (LU < nombreMystere)
    printf("PlUS!\n");

    else if (LU > nombreMystere)
    printf("MOINS!\n");

    else if (LU = nombreMystere)
    {printf("bravo! vous l'avez trouve en %Id fois!\nUne autre partie?\n", COUPS);
    scanf("%Id",&REPONSE);}}}
    system("PAUSE");
    return 0;}

    le code est bien compilé, mais au moment ou on demande "une autre partie?" je rentre 1 pour faire une autre partie et o_O .... rien ne se passe, je comprends pas ou est l'erreur! merci d'avance! :)
    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2006 à 15:49:38

      utilise les balises , ton code sera plus lisible il nous sera plus facile de t aider ...
      ;)
      • Partager sur Facebook
      • Partager sur Twitter
        30 novembre 2006 à 16:05:23

        Tout dabord il faut savoir que pour afficher un log int tu dois utilisé %ld et pas %id.


        Et il y a une erreur:

        /* Dans ta boucle principale: */
        while(REPONSE = 1) { ... }

        Il faut que tu saches aussi que: le symbole = sert a l'affectation et pas a la comparaison comme en mathématique, le symbole que tu dois utiliser pour la comparaison est ==
        while(REPONSE == 1)



        voila ton code, plus lisible:


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

        int main(void)
        {
            long nombreMystere, LU, COUPS = 0;
            const long MAX = 100, MIN = 1;
            srand(time(NULL));
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
            int REPONSE = 1;
            while (REPONSE == 1)
            {
                while (LU != nombreMystere)
                {
                    printf ("entrez le nombre mystere\n");
                    scanf ("%ld", &LU);
                    COUPS++;
                    if (LU < nombreMystere)
                        printf("PlUS!\n");

                    else if (LU > nombreMystere)
                        printf("MOINS!\n");

                    else if (LU = nombreMystere)
                    {
                        printf("bravo! vous l'avez trouve en %ld fois!\nUne autre partie?\n", COUPS);
                        scanf("%ld",&REPONSE);
                    }
                }
            }

            system("PAUSE");
            return 0;
        }




        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2006 à 16:29:23

          Citation : Bad_Day

          Il faut que tu sache aussi que: le simbol = sers a l'affectation et pas a la comparésant comme en mathématique, le simbole que tu dois utilisé pour la comparésant est ==


          Fake ! FAKE §§!!

          C'est pas possible d'écrire aussi mal ! Pourquoi tu ne te relis donc pas ?

          Citation : Bad_Day

          Il faut que tu saches aussi que : le symbole = sert à l'affectation et pas à la comparaison comme en mathématique, le symbole que tu dois utiliser pour la comparaison est ==


          Fait un effort, c'est vraiment chiant là de te lire... Je sais pas, ya des limites quoi. Il n'est pas possible à tout le monde d'écrire sans aucune faute d'orthographe, mais se relire, ce n'est pas non-plus beaucoup demander.


          J'ai aussi quelques remarques pour "air maroc" (pseudo ridicule) :
          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>

          /* un peu d'espacement ! t'as le droit de mettre des lignes vides */
          int main() /* paramètres inutilisés, pas la peine de les mettre */
          {   /* fait un effort pour l'indentation, c'est illisible là ! */
              /* pourquoi utiliser long ? int convient très bien... */
              int nombreMystere, lu, coups = 0;
              char reponse;
              /* préférer les majuscules pour les constantes... */
              const int MAX = 100, MIN = 1;
             
              srand(time(NULL));
             
              /* version équiprobable */
              nombreMystere = (rand() * (MAX - MIN + 1) / RAND_MAX) + MIN;
             
              /*int reponse = 1;  les déclarations doivent se trouver en début de bloc
               * en C89 */

              do { /* déplacer la condition à la fin... */
                  while (lu != nombreMystere)
                  {
                      printf ("Entrez le nombre mystere :\n");
                      scanf ("%d", &lu); /* %d pour int */
                      coups++;
                      if(lu < nombreMystere)
                          printf("PLUS !\n");
                     
                      else if(lu > nombreMystere)
                          printf("MOINS !\n");
                     
                      else /*if (LU = nombreMystere)  utiliser == et non =
                            * la condition et de plus inutile, si c'est pas < et pas >
                            * alors c'est forcément == */

                      {
                          printf("Bravo ! Vous l'avez trouve en %d fois !\n"
                              "Une autre partie ? (o/n)\n", coups);
                          scanf("%c", &reponse);
                      }
                  }
              }
              while(reponse == 'o');
             
              /* pause est une commande système non-portable uniquement disponible sous
               * windows... */

              getchar();
             
              return 0;
          }
          • Partager sur Facebook
          • Partager sur Twitter
            30 novembre 2006 à 16:36:07

            olala je ne savais pas que vous alliez repondre aussi vite, ce qui prouve que c'est un forum tres actif, merci a vous tous et surtout a bad_day qui a bien trouvé l'erreur. c'était vraiment bête, je comprends qu'il faut un minimum de rigueur avec le c. encore merci!
            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2006 à 13:58:19

              RE salut, petite remarque pour remram44(on voit que t'aime bien les remarques :lol: ) mon pseudo que t'a appelé "ridicule" a une signification, si je n'aurais pas envisagé que ton pseudo ait une quelconque "signification" j'aurais sans doute penser qu'il était stupide :p ainsi que pas mal de pseudo circulant sur le net; donc un peu de respect stp!
              pour revenir au probleme, même en ayant corrigé mon erreur le programme se comporte de la même facon :euh: , je pense que j'ai trouvé d'ou vient le problème mais je suis pas sur, dès que je trouve, je posterai ici la soulution :)
              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2006 à 14:32:01

                Voila j'ai trouvé maintenant, j'ai compris pourquoi ca ne marchait pas.En fait il fallait que la variabale contenant le nombre mystere soit mise à l'intérieur de la boucle sinon on ne pourrait pas faire plusieurs jeu, aprés la fin du premier jeu cette variable gardera sa valeur si elle n'est pa réinitialisé. Voila mon code qui inclut aussi le choix du nombre des joueurs.
                #include <stdio.h>
                #include <stdlib.h>
                #include <time.h>
                    int main(int argc, char *argv[])
                    {int nombreMystere, LU, REPONSE = 1, mode;
                    const long MAX = 100, MIN = 1;
                    srand(time(NULL));
                        printf("1--->Mode 1 joueur\n2--->Mode 2 joueurs\n");
                        scanf("%Id", &mode);
                   
                    while (REPONSE == 1)
                    {int COUPS = 0;
                          if (mode == 1)
                          nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                else
                {printf("Joueur 1 tapez le nombre a chercher.");
                scanf ("%Id", &nombreMystere);}

                    while (LU != nombreMystere)
                    {
                         printf ("entrez le nombre mystere\n");
                         scanf ("%Id", &LU);
                         COUPS++;
                          if (LU < nombreMystere)
                          printf("PlUS!\n");
                         
                          else if (LU > nombreMystere)
                          printf("MOINS!\n");
                         
                          else
                       {printf("bravo! vous l'avez trouve en %Id fois!\nUne autre partie?\n"
                       "1--->oui!\n2--->non\n", COUPS);}}
                         
                         scanf("%Id", &REPONSE);}
                                  system("PAUSE");
                         
                      return 0;}
                   

                désolé j'ai pas mis de commentaire (la fleme), je mettrai la prochaine amélioration quand jaurais le temps(les cours...).
                • Partager sur Facebook
                • Partager sur Twitter
                  4 décembre 2006 à 16:01:23

                  1)Indente!!!
                  2)Saute des lignes,c'est plus clair.
                  3)Il est assez courant (mais pas obligé) de mettre le bom des constants en MAJUSCULES et les autres variables en minuscule ( :-° ).
                  4)
                  scanf ("%Id",&nombreMystere);

                  C'est %d pour un entier.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 décembre 2006 à 16:10:32

                    Je voulais juste faire une petite remarque (un peu hors-sujet...). C'est au niveau de l'écriture; c'est bien de se relire comme le dit plus haut Remram44 mais il ne faut pas oublier les Majuscules qui font partie de la langue Française.

                    Merci pour votre écoute et bonne chance Air Macro pour le "C/C++"
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 décembre 2006 à 17:06:14

                      Voila j'ai vraiment fini le tp, je ne savais pas qui'il fallait mettre %d pour les entiers(ca na pa été mentioné dans le cours de m@teo, ou j'ai peut etre oublié), voila mon nouveau code avec le choix de la difficulté en plus.
                      je sais qui'il ya encore pleins d'améliorations a faire, dès que jen trouve des idées interressantes je les posterai.
                      je l'ai indenté j'espère qu'il sera plus lisible...
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <time.h>
                              int main(int argc, char *argv[])
                              {int nombreMystere, LU, REPONSE = 1, mode, MIN = 1, MAX, niveau;
                              printf("****MON PREMIER JEU EN C****\n\n\n");
                              printf("Choisissez le niveau de difficulte\n"
                              "1-->Niveau1\n2-->Niveau2\n3-->Niveau3\n");
                              scanf("%d", &niveau);
                             
                             
                             
                              if (niveau == 1)
                              MAX = 100;
                              else if (niveau == 2)
                              MAX = 1000;
                              else if (niveau == 3)
                              MAX = 10000;
                             
                             
                             
                              srand(time(NULL));
                                  printf("1--->Mode 1 joueur\n2--->Mode 2 joueurs\n");
                                  scanf("%d", &mode);
                             
                             
                              while (REPONSE == 1)
                              {int COUPS = 0;
                                   
                                   
                                   
                                    if (mode == 1)
                                    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                                    else
                                    {printf("Joueur 1 tapez le nombre a chercher.");
                                     scanf ("%d", &nombreMystere);}
                         
                             
                             
                              while (LU != nombreMystere)
                              {
                                   printf ("entrez le nombre mystere\n");
                                   scanf ("%d", &LU);
                                   COUPS++;
                                 
                                   
                                   
                                   
                                    if (LU < nombreMystere)
                                    printf("PlUS!\n");
                                    else if (LU > nombreMystere)
                                    printf("MOINS!\n");
                                    else
                                    {printf("bravo! vous l'avez trouve en %Id fois!\nUne autre partie?\n"
                                    "1--->oui!\n2--->non\n", COUPS);}}
                                   
                                 
                                 
                                   scanf("%d", &REPONSE);}
                                        system("PAUSE");
                                   
                                return 0;}
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 décembre 2006 à 17:24:07

                        Citation : remram44

                        Citation : Bad_Day

                        Il faut que tu sache aussi que: le simbol = sers a l'affectation et pas a la comparésant comme en mathématique, le simbole que tu dois utilisé pour la comparésant est ==



                        Fait un effort, c'est vraiment chiant là de te lire... Je sais pas, ya des limites quoi. Il n'est pas possible à tout le monde d'écrire sans aucune faute d'orthographe, mais se relire, ce n'est pas non-plus beaucoup demander.


                        +1

                        Et je rappelle que Firefox 2 a un module de correction. Chez moi, ces mots sont soulignés :

                        Citation : Bad_Day

                        Il faut que tu sache aussi que: le simbol = sers a l'affectation et pas a la comparésant comme en mathématique, le simbole que tu dois utilisé pour la comparésant est ==


                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                          5 décembre 2006 à 11:51:00

                          Citation : -ed-

                          ...


                          module de correction !?
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème de débutant!

                          × 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