Langage C problème avec mes pointeurs.

Résolu/Fermé
overlolo Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008 - 11 sept. 2008 à 21:46
overlolo Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008 - 11 sept. 2008 à 23:05
Bonjour,
voilà j'apprends le C sur le site du zéro et dans la première partie il y a un tp à réalisé, l'IDE que j'utilise est Code::Block.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


long genereNombre(long MIN,long MAX)

{
    srand(time(NULL));
    return (rand() % (MAX - MIN + 1)) + MIN;
}

void demande_nombreMystere(long* nombre1,long* nombre3,long N,long M)

{
    printf("Quel est le nombre mystere?:"); //nombreEntre= Celui que le joueur donne.
    scanf("%ld",nombre1);
    /*A chaque fois que programme lit la valeur que l'on rentre le nombre de coups
    augmente de 1*/
    //NDC++;

    while (*nombre1>M)
    /*Tant que l'on rentre une valeur supérieur à la valeur Maximum, on nous redemande
    une valeur correcte et on nous compte quand même un point ^^*/
    {
        *nombre3++;
        printf("Attention vous avez choisi le niveau %ld donc le nombreMystere est compris entre 1 et %ld:",N,M);
        scanf("%ld",nombre1);
    }


}

void compareNombres(long nombre1,long nombre2,long nombre3)

{
        if (nombre1<nombre2)
            printf("PLUS!\n\n");
        else if (nombre1>nombre2)
            printf("MOINS!\n\n");
        else
            printf("BRAVO vous avez trouve le nombre mystere qui est %ld en %ld coups\n\n",nombre1,nombre3);
}





void cacherNombreMystere(long cle)

{
  printf("Pour cacher le nombreMystere appuyez sur la touche 3:");
  scanf("%ld",&cle);

  while (cle!=3)
    {
        printf("Pour cacher le nombreMystere appuyez sur la touche 3:");
        scanf("%ld",&cle);
    }
    /*Les deux lignes du dessous permettent de sauter plusieur ligne histoire de cacher ce que
    le joueur 1 a mi comme nombreMystere!*/

    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("A vous de jouer! Bon courage!\n");

}



int main ( int argc, char** argv )

{
    long nombreMystere=0,nombreEntre = 0,nombreDeCoups=0,nombreDeJoueur,cacheMystere=0,niveau=0,MAX=0;
    const MIN = 1;
    int continuerPartie=1;

    /*Toutes les lignes avant le switch permettent d'afficher le menu, les deux modes de jeu prendre en
    mémoire celui qui a été choisi.Elles permettent aussi d'afficher les différents niveaux de difficulté
    disponibles et de garder en mémoire celui qui à été choisi.*/

    printf("====================================  MENU  ====================================\n\n\n");
    printf("MODES DE JEU:\n\n");
    printf("  * 1 JOUEUR!\n\n");
    printf("  * 2 JOUEURS!\n\n");
    printf(" Si vous desirez jouer seul tapez 1 sinon tapez 2:");
    scanf("%ld",&nombreDeJoueur);
    printf("\n\n");

    printf("==========  NIVEAU DE DIFFICULTE  ==========:\n\n\n");
    printf("1.EASY (nombreMystere compris entre 1 et 100)\n\n");
    printf("2.MEDIUM (nombreMystere compris entre 1 et 1000)\n\n");
    printf("3.HARD (nombreMystere compris entre 1 et 10000)\n\n");
    printf("4.GROS GEEK (nombreMystere compris entre 1 et 1000000)\n\n");
    printf("5.PERSON WITH SUICIDAL TENDENCIES (nombreMystere compris entre 1 et 1000000000)\n\n\n");
    printf("Quel niveau choisissez vous?:");
    scanf("%ld",&niveau);

    /* Selon le niveau choisi soit 1,2,3,4, ou 5 une petite phrase d'encouragement est affichée ^^
    et la variable MAX reçoit la valeur Maximum du niveau correspondant.Tant que l'on ne donnne pas
    un niveau existant on nous le redemande!*/

    while ((niveau==0) || (niveau>5))

    {
      printf("Vous devez choisir un niveau existant:");
      scanf("%ld",&niveau);
    }


    switch (niveau)
    {
        case 1:
            printf("Vous avez choisi le mode EASY cela ne devrait pas etre trop difficile ^^\n\n");
            MAX=100;
            break;
        case 2:
            printf("Vous avez choisi le mode MEDIUM cela devrait etre un peu plus difficile\n\n");
            MAX=1000;
            break;
        case 3:
            printf("La le HARD ca se corse heyhey\n\n");
            MAX=10000;
            break;
        case 4:
            printf("La il faut vraiment etre fou!!\n\n");
            MAX=1000000;
            break;
        case 5:
            printf("Vous etes bon pour le cercueil ptdr\n\n");
            MAX=1000000000;
            break;
    }



    if (nombreDeJoueur!=2)

    {
        //Petite explication du mode un joueur.
         printf("Vous avez choisi le mode un joueur.Le but du est simple votre ordinateur va tirer au hasard un nombre entre 1 et %ld appele nombreMystere vous allez devoir trouver ce nombre.Il vous donnera des informations selon que votre chiffre est inferieur ou superieur au nombreMystere.\n\n",MAX);

        do //Tant que l'on ne tape pas 0 à la fin d'une partie on revient dans la boucle.
        {
            nombreMystere=genereNombre(MIN,MAX);

            //Initialisation d'un nombre aleatoire a chaque début de partie!

            do
            //Tant que l'on à pas trouvé le nombreMystere on nous le redemande.
            {

              demande_nombreMystere(&nombreEntre,&nombreDeCoups,niveau,MAX);
              nombreDeCoups++;
              /*Lorsque l'on sort de la boucle c'est que la valeur est correctement comprise entre
              les valeurs correspondantes à celles du niveau choisi donc on peut la comparer au
              nombreMystere que l'ordinateur à tiré au hasard!*/
            compareNombres(nombreEntre,nombreMystere,nombreDeCoups);
            }
            while (nombreEntre!=nombreMystere);
            nombreDeCoups=0;

            /*Dès que l'on a trouvé le nombreMystere peut importe que l'on continue ou non
            la variable nombreDeCoups est remise à 0. Comme ça si on décide de rejouer la variable
            nombreDeCoups ne contiendra pas la valeur qu'elle avait en fin de partie*/

            printf("Si vous voulez recommencer une partie tapez 1 sinon tapez 0:");
            scanf("%ld",&continuerPartie);
        }
        while(continuerPartie);


    }

    else //Si la personne à tapé 2 alors le mode deux joueurs est initialisé.

    {
     //Petite explication du mode deux joueurs.
     printf("Vous avez choisi le mode 2 joueurs. Un des joueurs va rentrer un nombre entre 1 et %ld et l autre joueur va devoir trouver le nombre que son adversaire a rentre au debut.\n\n",MAX);;

     do
     {
        /* En rentrant dans la boucle on demande au premier joueur de rentrer une valeur, tant que
        celle-ci est superieur au nombre Maximum du niveau choisi alors on lui redemande une valeur
        comprise entre 1 et le Maximum! En sortant de la boucle la valeur de nombreMystere est correcte
        et la partie peut commencer.*/

        printf("Entrez le nombreMystere que votre adversaire va devoir trouver!:");
        scanf("%ld",&nombreMystere);

        while(nombreMystere>MAX)

        {
            printf("Le nombre que vous avez choisi est superieur a %ld choisissez en un qui est inferieur ou egal\n\n",MAX);
            printf("Entrez le nombreMystere que votre adversaire va devoir trouver!:");
            scanf("%ld",&nombreMystere);
        }

        cacherNombreMystere(cacheMystere);

        do

        {

            demande_nombreMystere(&nombreEntre,nombreDeCoups,niveau,MAX);
            nombreDeCoups++;
            compareNombres(nombreEntre,nombreMystere,nombreDeCoups);

        }
        while (nombreEntre!=nombreMystere);
        nombreDeCoups=0;

        printf("Si vous voulez recommencer une partie tapez 1 sinon tapez 0:");
        scanf("%ld",&continuerPartie);
     }
     while(continuerPartie);

    }

    /*On retourne dans la boucle tant que continuerPartie à la valeur 1
    sinon on sort de la boucle et le programme se termine*/

    printf("MERCI D AVOIR JOUER AU JEU DU PLUS OU MOINS A BIENTOT!\n\n");
    system("PAUSE");
    return 0;
}

Je vous explique mon problème lorsque par exemple vous lancez le mode 1 joueur et le niveau 1 on vous demande le nombreMystere une fois trouvé on vous dit BRAVO et on vous donne le nombre de coups tout est nickel. Seulement toujours dans le niveau 1 si vous essayé de mettre des valeurs supérieur à 100 celle-ci ne sont pas compté en tant que coups par exemple si vous tapez:400 puis 500 puis 10 puis 13: 13 étant le nombre mystere on va vous dire BRAVO..... en 2 coups. Oui sauf que moi je voudrais que ça soit 5 coups ^^. C'est donc un pb avec nombreDeCoups mais n'ayant pas encore vu les pointeurs j'ai un peu de mal merci de m'aider ça fait depuis hier matin que j'y suis je débute. Dite moi ce que je dois écrire s'il vous plait je déprime après 10heures de recherche je suis sur que c'est un truc de merde en plus. Merci beaucoup!!
A voir également:

10 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
11 sept. 2008 à 22:49
t'as essayé ce que je t'ai dis de faire au message 1 ?
1
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
11 sept. 2008 à 22:17
j'ai pas testé mais surement un probleme de priorité...
dans ta fonction lorsque tu incrementes le nombre de coups rajoute les parentheses
(*nombre3)++;
-1
comingseb Messages postés 48 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 30 juin 2009 11
11 sept. 2008 à 22:21
slt,

je n'ai pas testé ton code mais je ne comprend pas pourquoi, dans ta fonction "demande_nombreMystere", tu utilise un while alors qu'un if aurait suffit...

Peut-être est-ce la cause de ton problème car j'ai vérifier et revérifier ton code; tu na pas besoin du while puisque tu en fait déjà un dans le main!

En espérant avoir été assez comprehenssible et avoir résolu ton problème! ^^

tient moi au courant...
-1
overlolo Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
11 sept. 2008 à 22:34
Salut oui j'ai remarqué qu'il ne servait à rien je l'ai donc remplacé par un if mais ça ne change rien :s au lieu de mettre nombreDeCoups++ après l'apel de ma fonction je l'ai enlevé et remplacé par *nombre3++ et ça fonctionne bien sauf que ya toujours mon soucis c'est peut être un problème de priorité ou de lecture de la valeur ça fait des heures que je réfléchir ça sera formatif mais je sature là aidez moi je vous en supli!!
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
overlolo Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
11 sept. 2008 à 22:47
J'ai di de la merde il y avait toujours nombreDeCoups++. On dirait que ma variable nombre3 n'est pas incrémenté car juste après l'apel de demande_nombreMystere... j'ai mi printf("%ld",nombreDeCoups) et à chaque fois ya marqué 0 c'est un problème de pointeur mais ou??
-1
overlolo Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
11 sept. 2008 à 22:57
Putain j'ai trouvé!!!!! C'est pas *nombre3++ mais (*nombre3)++!!!! Faut faire gaf à ça bordel :s:s c'est ce que tu disais mype mais j'avais pas capté!!!! Merciiiiiiii
-1
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
11 sept. 2008 à 23:00
éh oui faut faire attention au priorité ;)
n'oublis pas de metre en resolu si tu n'as plus de problemes...
-1
comingseb Messages postés 48 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 30 juin 2009 11
11 sept. 2008 à 23:01
je crois avoir trouvé ton erreur...

dans ton dernier "do ... while", lorsque tu appel ta fonction "demande_nombreMystere" tu a oublier un "&" ...

pour être plus clair, tu as écrit :
demande_nombreMystere(&nombreEntre,nombreDeCoups,niveau,MAX);

au lieu de :
demande_nombreMystere(&nombreEntre,&nombreDeCoups,niveau,MAX);
-1
comingseb Messages postés 48 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 30 juin 2009 11
11 sept. 2008 à 23:02
dsl j'avais pa vu le dernier post... ^^
-1
overlolo Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
11 sept. 2008 à 23:05
Merci à tous pour votre aide. A bientôt.
-1