Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction sous C

    19 août 2006 à 15:20:14

    Bonjour,

    Voici l amélioration du petit jeu avec les fonctions :
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    long genereNombre(long nombreEntre, long nombreMystere)
    {
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    }

    long compareNombres(long nombreEntre, long nombreMystere)
    {
     if(nombreEntre < nombreMystere)
      {
       printf("C'est plus !");
      }
     else if(nombreEntre > nombreMystere)
      {
       printf("C'est moin !");
      }
     else
      {
       printf("Bravo vous avez trouve le nombre mystere !");
      }
    }
    int main(int argc, char *argv[])
    {
        long nombreMystere = 0, nombreEntre = 0;
        const long MAX = 100, MIN = 1;

        // Génération du nombre aléatoire
        nombreMystere = genereNombre(MIN, MAX);

        /* La boucle du programme. Elle se répète tant que l'utilisateur
            n'a pas trouvé le nombre mystère */


        do
        {
            // On demande le nombre
            printf("Quel est le nombre ? ");
            scanf("%ld", &nombreEntre);

            // On compare le nombre entré avec le nombre mystère
            compareNombres(nombreEntre, nombreMystere);

        } while (nombreEntre != nombreMystere);


        system("PAUSE");
    }


    J' aimerai savoir ou se situe mon probleme car impossible de le compilé, j ai beau chercher je ne le trouve pas.
    L' erreur se situe dans la fonction genereNombre.

    Merci,
    • Partager sur Facebook
    • Partager sur Twitter
      19 août 2006 à 16:21:01

      srand(time(NULL)); ne doit être innitialisé qu'une fois au début de main. Il manque un return pour ta fonction genereNombre, et ta fonction compareNombres doit être de type void et non de type long
      • Partager sur Facebook
      • Partager sur Twitter
        19 août 2006 à 17:16:27

        Void parce qu' il ne retourne aucune valeur ..
        la fonction retourn je la met avec quoi? car si je suis le "courant" je dois faire un retourn sur le main mais je ne peux pas mettre retourn main.

        srand(time(NULL)); doit etre mis dans la fonction main absolument?
        • Partager sur Facebook
        • Partager sur Twitter
          19 août 2006 à 17:19:40

          Citation : cutter

          Void parce qu' il ne retourne aucune valeur ..
          la fonction retourn je la met avec quoi? car si je suis le "courant" je dois faire un retourn sur le main mais je ne peux pas mettre retourn main.


          Tu dis retourner la génération de ton nombre, donc mets un : return nombreMystere; dans ta fonction prévue à cette effet.

          Citation : cutter

          srand(time(NULL)); doit etre mis dans la fonction main absolument?


          Non, du moment qu'elle n'est pas dans une boucle et que tu n'appelles pas cette fonction plusieurs fois.
          • Partager sur Facebook
          • Partager sur Twitter
            19 août 2006 à 17:55:45

            warning C4244: 'argument' : conversion de 'time_t' en 'unsigned int', perte possible de données
            error C2065: 'MAX' : identificateur non déclaré
            error C2065: 'MIN' : identificateur non déclaré

            Voici ce que j ai encore et toujours ..

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

            long genereNombre(long nombreEntre, long nombreMystere)
            {
            srand(time(NULL));
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
            return nombreMystere;
            }

            void compareNombres(long nombreEntre, long nombreMystere)
            {
             if(nombreEntre < nombreMystere)
              {
               printf("C'est plus !");
              }
             else if(nombreEntre > nombreMystere)
              {
               printf("C'est moin !");
              }
             else
              {
               printf("Bravo vous avez trouve le nombre mystere !");
              }
            }
            int main(int argc, char *argv[])
            {
                long nombreMystere = 0, nombreEntre = 0;
                const long MAX = 100, MIN = 1;

                // Génération du nombre aléatoire
                nombreMystere = genereNombre(MIN, MAX);

                /* La boucle du programme. Elle se répète tant que l'utilisateur
                    n'a pas trouvé le nombre mystère */


                do
                {
                    // On demande le nombre
                    printf("Quel est le nombre ? ");
                    scanf("%ld", &nombreEntre);

                    // On compare le nombre entré avec le nombre mystère
                    compareNombres(nombreEntre, nombreMystere);

                } while (nombreEntre != nombreMystere);


                system("PAUSE");
            }


            j ai donc mit un void pour la fonction compareNombre, et ajouté un retourn nombreMystere dans la fonction GenereNombre.
            Pourtant je n ai pas vraiment compris :

            nombreMystere = genereNombre(MIN, MAX);

            La il renvois a la fonction
            long genereNombre(long nombreEntre, long nombreMystere)


            Alors comment se fait t' il que pour le retourn on dois mettre nombreMystere, a quoi cela renvois t' il exactement?
            • Partager sur Facebook
            • Partager sur Twitter
              19 août 2006 à 18:02:11

              hum


              long genereNombre(long nombreEntre, long nombreMystere)


              Pourquoi tu utilises ces paramètres ? Normal qu'il ne trouve pas MIN et MAX. Tu peux utiliser un prototype du genre :

              Secret (cliquez pour afficher)


              long genereNombre(const long MIN, const long MAX)

              • Partager sur Facebook
              • Partager sur Twitter
                19 août 2006 à 18:02:42

                Il faut déclarer MAX et MIN, c'est pour ça que ça marche pas (en argument).

                Le return sert à renvoyer quelque chose de la fonction. Tu renvoies ton nombre mystère avec un return et ta fonction marche.

                Où est le problème ?

                • Partager sur Facebook
                • Partager sur Twitter
                  19 août 2006 à 18:53:44

                  C'est exactement comme le disent Octal et Kr00ps, les arguments sont MIN et MAX et pas nombreEntre et nombreMystere. Tu as dû copier la fonction compareNombres et changer seulement le nom.

                  En même temps, lorsque tu auras fait ça, tu dois déclarer à l'intérieur de la fonction une variable long nombreMystere, sinon erreur de compilation.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Fonction sous C

                  × 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