Bonjour, je suis en train d'essayer de faire marcher mon TP sur le pendu, et tout se passe bien pendant la première partie. Seulement lorsque je choisis de rejouer, la première lettre que je tape est constamment reconnue comme fausse.
J'ai beau relire mon code, je ne comprends pas pourquoi... Sachant que toutes les variables sont réinitialisées au moment où l'on choisit de rejouer, cela devrait marcher comme lorsque je lance le jeu pour la première fois, mais rien à faire...
Si quelqu'un savait m'expliquer l'erreur, ça me sauverais
Merci.
main.c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "Fonctions.h"
#include "dico.h"
#define RLINE printf("\n");
#define TAB printf("\t");
#define SEPARE printf("\n\t-----------------------\n");
#define COUPSR 10
int main()
{
int rejouer=0;
do
{
system("cls");
rejouer=0;
int i=0;
int coupsRestant=COUPSR;
char motSecret[100]={0};
int *lettreTrouvee=NULL;
char lettreEntree=0;
int nombreMotsDico=0;
int tailleMotPiocher=0;
int numeroMotPiocher=0;
int caractereLu=0;
FILE *dico=NULL;
dico=fopen("dico.txt", "r");
if (!dico)
printf("\n\nERREUR dico\n\n");
do
{
caractereLu=fgetc(dico);
if(caractereLu=='\n')
nombreMotsDico++;
}while(caractereLu != EOF);
numeroMotPiocher=nombreAleatoire(nombreMotsDico);
rewind(dico);
for(i=0; i<numeroMotPiocher; i++)
if(!fgets(motSecret, 100, dico))
printf("\n\nERREUR Mot piocher\n\n");
motSecret[strlen(motSecret)-1]='\0';
dico=fclose(dico);
tailleMotPiocher=strlen(motSecret);
lettreTrouvee=malloc(tailleMotPiocher*sizeof(int));
for(i=0; i<tailleMotPiocher; i++)
lettreTrouvee[i]=0;
printf("%s", motSecret); //Pour les Tests
RLINE
RLINE
menuTitre();
menuJeu(coupsRestant, motSecret, lettreTrouvee, lettreEntree, i);
menuGagne(lettreTrouvee, motSecret);
RLINE
TAB
printf("Voulez-vous rejouer ? OUI (1) NON (0) : ");
scanf("%d", &rejouer);
free(lettreTrouvee);
}while(rejouer==1);
return 0;
}
fonction.c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "Fonctions.h"
#define RLINE printf("\n");
#define TAB printf("\t");
#define SEPARE printf("\n\t-----------------------\n");
int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % (nombreMax))+1;
}
void menuTitre()
{
RLINE
TAB
printf("Bienvenu dans le jeu du Pendu !");
RLINE
TAB
printf("-------------------------------");
RLINE
}
void menuJeu(int coupsRestant, char motSecret[], int lettreTrouvee[], char lettreEntree, int i)
{
while(coupsRestant!=0 && !partieGagne(lettreTrouvee, motSecret))
{
RLINE
TAB
printf("Coups restant : %d", coupsRestant);
RLINE
TAB
printf("Mot secret : ");
for (i=0; motSecret[i]!='\0';i++)
{
if(lettreTrouvee[i]==1)
{
printf("%c", motSecret[i]);
}
else
{
printf("*");
}
}
RLINE
TAB
printf("Entrez une lettre : ");
lettreEntree=lireLettre();
if (!compareLettre(lettreEntree, motSecret, lettreTrouvee))
{
coupsRestant--;
}
SEPARE
}
}
void menuGagne(int lettreTrouvee[], char motSecret[])
{
if (partieGagne(lettreTrouvee, motSecret))
{
RLINE
TAB
printf("Vous avez Gagner !, le mot secret etait bien : %s", motSecret);
RLINE
}
else
{
RLINE
TAB
printf("Vous avez perdu !, le mot secret etait : %s", motSecret);
RLINE
}
}
char lireLettre()
{
char lettre=0;
lettre=getchar();
lettre=toupper(lettre);
while(getchar()!='\n');
return lettre;
}
int compareLettre(char lettreEntree, char motSecret[], int lettreTrouvee[])
{
int i=0;
int lettreOK=0;
for(i=0; motSecret[i]!='\0';i++)
{
if (lettreEntree==motSecret[i])
{
lettreTrouvee[i]=1;
lettreOK=1;
}
}
return lettreOK;
}
int partieGagne (int lettreTrouvee[], char motSecret[])
{
int i=0;
int gagne=1;
for (i=0; motSecret[i]!='\0';i++)
{
if (!lettreTrouvee[i])
{
gagne=0;
}
}
return gagne;
}
fonction.h
void menuTitre();
void menuJeu(int coupsRestant, char motSecret[], int lettreTrouvee[], char lettreEntree, int i);
void menuGagne(int lettreTrouvee[], char motSecret[]);
char lireLettre();
int compareLettre(char lettreEntree, char motSecret[], int lettreTrouvee[]);
int partieGagne (int lettreTrouvee[], char motSecret[]);
int nombreAleatoire(int nombreMax);
Merciiii, après avoir vidé le buffer à la toute fin, ça fonctionne
TP - Le pendu - Language 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.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub