Langage C problème avec mes pointeurs.
Résolu
overlolo
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
overlolo Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
overlolo Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
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.
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!!
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:
- Langage C problème avec mes pointeurs.
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
10 réponses
j'ai pas testé mais surement un probleme de priorité...
dans ta fonction lorsque tu incrementes le nombre de coups rajoute les parentheses
dans ta fonction lorsque tu incrementes le nombre de coups rajoute les parentheses
(*nombre3)++;
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...
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...
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!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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??
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
éh oui faut faire attention au priorité ;)
n'oublis pas de metre en resolu si tu n'as plus de problemes...
n'oublis pas de metre en resolu si tu n'as plus de problemes...
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 :
au lieu de :
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);