Le jeu du pendu

Fermé
Rack - 12 mars 2014 à 13:34
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 - 14 mars 2014 à 18:30
Bonjour,

après avoir lancé mon programme, la console affiche les deux premiers printf, puis quand je rentre le scanf, monprojet.exe, cesse de fonctionner.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void initialiser(char *pointeur1, char[], char[], int *pointeur4, char[]);

void afficher(int *pointeur4, char[], char[], char[], char *pointeur1);

int tailleTableau = 5;



int main()

{

char reponse[]="";

int nombreDeVie=10;

int* pointeur4=&nombreDeVie;

char caractereARechercher;

char* pointeur1=&caractereARechercher;

char motMystere[]="ROUGE";

char motCache[]="*****";

afficher(pointeur4, motCache, reponse, motMystere, pointeur1);

}

void initialiser(char *pointeur1, char motCache[], char reponse[], int *pointeur4, char motMystere[]){

int i ;

for(i=0; i<tailleTableau; i++){

char *pointeur1, motCache[i], motMystere[i];

if(*pointeur1 == motMystere[i]){

motCache[i]=*pointeur1;

afficher(pointeur4, motCache, reponse, motMystere, pointeur1);
}

else if(*pointeur1 != motMystere[i]){

*pointeur4--;

afficher(pointeur4, motCache, reponse, motMystere, pointeur1);

}


}

}

void afficher(int *pointeur4, char motCache[], char reponse[], char motMystere[], char *pointeur1){

if(*pointeur4==0){

printf("Vous avez perdu\n");

printf("Souhaitez-vous rejouer?");

scanf("%s", reponse);

}



else if(strcmp(motCache, motMystere)==0){

printf("Bravo! Vous avez gagné!");

printf("Souhaitez-vous rejouer?");

scanf("%s", reponse);

}





else{

printf("Il vous reste %d vies\n", *pointeur4);

printf("Quel est le mot secret? %s", motCache);

scanf("%c", pointeur1);

initialiser(pointeur1, motCache, reponse, pointeur4, motMystere);

}

}
A voir également:

1 réponse

nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 14/03/2014 à 18:32
Bonjour!
Au vu des erreurs données par ton prog, on peut en déduire déjà la plupart des erreurs:

Il vous reste 10 vies
Quel est le mot secret? *****a
Bravo! Vous avez gagné!Souhaitez-vous rejouer?o
Il vous reste 134514690 vies
Quel est le mot secret? d??d?Bravo! Vous avez gagné!Souhaitez-vous rejouer?o
Il vous reste 134520832 vies
Quel est le mot secret? ?Bravo! Vous avez gagné!Souhaitez-vous rejouer?o
Il vous reste -1081481981 vies
Quel est le mot secret? ?????T???W?Bravo! Vous avez gagné!Souhaitez-vous rejouer?o

Bref, ton problème se situe au niveau des pointeurs sur le nombre de vies, sur le mot 'mystère' et dans le teste de réussite à trouver le mot.
Au passage, je te conseille vivement de renommer tes pointeurs...

Cette fonction, 'Initialiser', tu devrais entièrement la revoir car pour chaque lettre du mot, même si on trouve la bonne réponse, la variable nombre de vie est décrémentée.
De plus il ne faut pas que l'appel de la fonction afficher soit dans la boucle for.
Il y a aussi cette ligne qui est inutile:
char *pointeur1, motCache[i], motMystere[i];
Et dans afficher, le teste avec strcmp n'est pas bon, la tu teste si les chaînes sont différentes et dans ce cas, tu affiche que le joueur a gagné, c'est l'inverse qu'il doit se passer.
De manière générale, deux fonctions qui s'appellent l'une l'autre n'est pas le meilleur moyen de faire des boucle... et je pense que c'est ça qui pose le plus gros problème dans ton code.
Je te conseille de mettre une while.

Sur ce, bosse bien et bon courage!
0