Partage
  • Partager sur Facebook
  • Partager sur Twitter

nouvelle impasse : "nombremystere" undeclared

    29 juin 2006 à 3:54:54

    post édité , finalement je me suis arrangé avec quelqu un et ca fonctionne

    si il y en a qui veulent le code

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

    int main(int argc, char *argv[])
    {
        int regame = 1;
      if(regame)
    do{
      // action tant que la condition difficulté <=4 n est pas remplie
      long difficulte;
      //on définit ici la variable difficulte
      long nombremystere;
      //on définit la variable nombremystere
      long compteur = 0;
      //on définit la variable compteur (de coups)
      long MAX = 100 , MIN = 1;
      //on définit la constante MIN et MAX
     
     
      printf("1.facile\n");
      printf("2.Moyen\n");
      printf("3.difficile\n");
      printf("4.insane\n");
     
      do {
         
      printf("veuilez choisir un niveau de difficulte");
      scanf("%ld" , &difficulte);
     
      switch(difficulte)
      {
      case 1 :
      MAX = 10;
      printf("petit joueur va ! Choisis un nombre de 1 a 10");
      break;
      case 2:
      MAX = 100;
      printf("mouais ok , ca va encore. Choisis un nombre de 1 a 100");
      break;
      case 3:
      MAX = 1000;
      printf("voila , quelqu un qui ose ! Choisis un nombre de 1 a 1000!");
      break;
      case 4 :
      MAX = 10000;
      printf("mwahah je sens qu on va bien s entendre tous les deux!!!! Choisis un nombre de 1 a 10000!!!!!");
      break;
    } 
    }
      while (difficulte >= 5);
      srand(time(NULL));
      nombremystere = (rand() % (MAX + MIN + 1 )) + MIN;
      printf("\n\n");
     
     
     
      long nombreEntre = 0;
      //on définit la variable nombreEntre
      scanf("%ld" , &nombreEntre);
      //on demande le nombre pour la 1ere fois
     
      while ( nombreEntre != nombremystere)
      //condition se réalisant uniquement si ce n est pas le nombre mystère qui est saisi
     
      {     compteur++;
            // incrémination de 1 au compteur final
           
            if (nombreEntre>nombremystere)
            //si le nombre entré est plus grand
           
            {
            printf("c est plus petit ;) essaye encore !");
            scanf("%ld" , &nombreEntre);
            }
            else
            //si le nombre entré est plus petit
            {
            printf("c est plus grand , essaye encore !");
            scanf("%ld" , &nombreEntre);
    }}

      if (nombreEntre == nombremystere)
      //si le nombre entré est le nombre mystère
      {
           printf("vous avez trouve %ld , le nombre mystere ! en %ld coups , felicitations ! \n" , nombremystere , compteur);
    }
      printf("voulez vous rejouer la partie ? si oui , tapez 1\n");
      scanf("%ld" , &regame);
      if(regame >= 2)
      {
       regame = 0;
     
    }}


    while (regame != 0 );
     
     
     
     
      system("PAUSE");     
      return 0;
    }
    //fin du programme


    petit question au passage , quelqu un saurait il comment éviter que lorsque j écris ("%ld" ,&quelquechose");

    si la personne écrit une lettre , cela crée une fenetre infinie , une idée?
    • Partager sur Facebook
    • Partager sur Twitter
      29 juin 2006 à 9:06:58

      Citation : Jaune


      petit question au passage , quelqu un saurait il comment éviter que lorsque j écris ("%ld" ,&quelquechose");

      si la personne écrit une lettre , cela crée une fenetre infinie , une idée?


      Lire le forum, par exemple ? C'est une question récurrente... Ne pas utiliser scanf() du tout mais uniquement fgets().
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        29 juin 2006 à 11:35:45

        Ne déclare pas tes variables dans la boucle mais au début du programme.
        • Partager sur Facebook
        • Partager sur Twitter
          29 juin 2006 à 11:41:27

              int regame = 1;
            if(regame)
          do{

          Indentation inversée, c'est la première fois que j'en vois !
          • Partager sur Facebook
          • Partager sur Twitter
            29 juin 2006 à 11:46:44

            Citation : Orochi

            Ne déclare pas tes variables dans la boucle mais au début du programme.


            Il est techniquement possible de faire les deux. Mais il peut y a voir des raisons algorithmiques qui font que l'une ou l'autre des méthodes est la bonne.
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              29 juin 2006 à 12:14:18

              Citation : -ed-


              Il est techniquement possible de faire les deux. Mais il peut y a voir des raisons algorithmiques qui font que l'une ou l'autre des méthodes est la bonne.



              Je ne comprends pas comment c'est possible, lors du 2eme passage dans la boucle, il devrait y avoir un message comme quoi la variable est déja déclaré puisque ca la re-déclare. (enfin c'est ma logique qui est differente de celle d'un compilateur)

              Mais dans tous les cas Jaune ne devrait pas commencer à le faire meme si ca fonctionne.
              • Partager sur Facebook
              • Partager sur Twitter
                29 juin 2006 à 13:09:27

                Citation : Orochi

                Je ne comprends pas comment c'est possible, lors du 2eme passage dans la boucle, il devrait y avoir un message comme quoi la variable est déja déclaré puisque ca la re-déclare. (enfin c'est ma logique qui est differente de celle d'un compilateur)


                Ben non. La déclaration est statique elle n'est faite qu'une fois. L'initialisation, par contre, est bien faite à chaque fois.
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  29 juin 2006 à 13:45:55

                  merci pour les constantes j ai changé ca de place =)

                  par contre en ce qui concerne fgets() il n a pas l air de marcher :( faut il ajouter une bibliotheque spécifique?

                  Citation : remram44

                  Code : C
                  int regame = 1;
                  if(regame)
                  do{

                  Indentation inversée, c'est la première fois que j'en vois !



                  euh et c est mal ? xD
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 juin 2006 à 14:17:09

                    Citation : Jaune

                    par contre en ce qui concerne fgets() il n a pas l air de marcher :( faut il ajouter une bibliotheque spécifique?


                    Non. Il faut simplement inclure <stdio.h>

                    Peux tu être plus précis que "il n a pas l air de marcher". Mes dons de voyance sont limités...
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      29 juin 2006 à 14:28:26

                      je m en doute ..

                      bin voila le code , j ai remplacé les scanf() par des fgets()

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

                      int main(int argc, char *argv[])
                      {
                        long difficulte;
                        //on définit ici la variable difficulte
                        long nombremystere;
                        //on définit la variable nombremystere
                        long compteur = 1;
                        //on définit la variable compteur (de coups)
                        long MAX = 100 , MIN = 1;
                        //on définit la constante MIN et MAX
                        long nombreEntre = 0;
                        //on définit la variable nombreEntre
                          int regame = 1;
                        if(regame)
                      do{
                        // action tant que la condition difficulté <=4 n est pas remplie

                       
                       
                        printf("1.facile\n");
                        printf("2.Moyen\n");
                        printf("3.difficile\n");
                        printf("4.insane\n");
                       
                        do {
                           
                        printf("veuilez choisir un niveau de difficulte");
                        fgets("%ld" , &difficulte);
                       
                        switch(difficulte)
                        {
                        case 1 :
                        MAX = 10;
                        printf("petit joueur va ! Choisis un nombre de 1 a 10");
                        break;
                        case 2:
                        MAX = 100;
                        printf("mouais ok , ca va encore. Choisis un nombre de 1 a 100");
                        break;
                        case 3:
                        MAX = 1000;
                        printf("voila , quelqu un qui ose ! Choisis un nombre de 1 a 1000!");
                        break;
                        case 4 :
                        MAX = 10000;
                        printf("mwahah je sens qu on va bien s entendre tous les deux!!!! Choisis un nombre de 1 a 10000!!!!!");
                        break;
                      }
                      }
                        while (difficulte >= 5);
                        srand(time(NULL));
                        nombremystere = (rand() % (MAX + MIN + 1 )) + MIN;
                        printf("\n\n");
                       
                       
                        fgets("%ld" , &nombreEntre);
                        //on demande le nombre pour la 1ere fois
                       
                        while ( nombreEntre != nombremystere)
                        //condition se réalisant uniquement si ce n est pas le nombre mystère qui est saisi
                       
                        {     compteur++;
                              // incrémination de 1 au compteur final
                             
                              if (nombreEntre>nombremystere)
                              //si le nombre entré est plus grand
                             
                              {
                              printf("c est plus petit ;) essaye encore !");
                              fgets("%ld" , &nombreEntre);
                              }
                              else
                              //si le nombre entré est plus petit
                              {
                              printf("c est plus grand , essaye encore !");
                              fgets("%ld" , &nombreEntre);
                      }}

                        if (nombreEntre == nombremystere)
                        //si le nombre entré est le nombre mystère
                        {
                             printf("vous avez trouve %ld , le nombre mystere ! en %ld coups , felicitations ! \n" , nombremystere , compteur);
                      }
                        printf("voulez vous rejouer la partie ? si oui , tapez 1\n");
                        fgets("%ld" , &regame);
                        if(regame >= 2)
                        {
                         regame = 0;
                       
                      }}


                      while (regame != 0 );
                       
                       
                       
                       
                        system("PAUSE");     
                        return 0;
                      }
                      //fin du programme


                      mais pourquoi donner scanf dans le tuto si fgets() est meilleur dans tous les cas?

                      les erreurs données a la compilation sont :


                      [warning] passing arg 2 of 'fgets' makes integer from pointer without a cast
                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 juin 2006 à 14:37:28

                        Citation : Orochi

                        Je ne comprends pas comment c'est possible, lors du 2eme passage dans la boucle, il devrait y avoir un message comme quoi la variable est déja déclaré puisque ca la re-déclare.


                        Je reviens là dessus puisque visiblement il y a confusion dans ton esprit.

                        La compilation sont deux processus qui n'ont rien à voir. Si dans le programme généré les instructions sont exécutées les unes à la suite des autres et dans l'ordre, ça n'a rien à voir avec les déclarations qui ne sont utilisées uniquement par le compilateur et ne figurent pas dans le code final !
                        De plus, il serait idiot de penser que le compilateur exécute la boucle ou la déplie lors de la compilation.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 juin 2006 à 15:12:57

                          remram44 >> Non j'ai bien compris ca, je me suis juste mal exprimé, je croyait que lors de l'EXECUTION du programme les variables seraient déclarés plusieurs fois.

                          Jaune >> fgets ne s'utilise pas exactement comme scanf: http://www.hmug.org/man/3/fgets.php
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 juin 2006 à 15:48:59

                            Citation : Orochi

                            remram44 >> Non j'ai bien compris ca, je me suis juste mal exprimé, je croyait que lors de l'EXECUTION du programme les variables seraient déclarés plusieurs fois.


                            Ok ok, ben en fait c'est le cas : en C++, le constructeur serait appelé à chaque début de boucle et le destructeur à chaque fin.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 juin 2006 à 18:35:41

                              Citation : Jaune

                              je m en doute ..

                              bin voila le code , j ai remplacé les scanf() par des fgets()


                                fgets("%ld" , &difficulte);



                              Ben non. Il faut arréter de faire n'importe quoi. On jamais dit de remplacer scanf() par fgets(), mais d'utiliser fgets() à la place de scanf(). Pour apprendre à utiliser une fonction nouvelle, le premier réflexe est d'ouvrir son document de référence, par exemple

                              http://man.developpez.com/

                              En complément :

                              http://mapage.noos.fr/emdel/notes.htm#saisie
                              http://mapage.noos.fr/emdel/notes.htm#fichiers
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !

                              nouvelle impasse : "nombremystere" undeclared

                              × 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