Bonjour,
Je débute dans la programmation. J'ai fait un code test (que j'aimerais améliorer après) pour le jeu PENDU mais ça ne marche pas correctement. Quand toutes les lettres du mot caché sont tapez, le jeu ne s'arrête pas. Et, quant je mets un mot secret plus long (par exemple PROGRAMME à la place de GRAMME), le code ne marche pas correctement non plus.
Est-ce que quelqu'un peut me dire où est le problème ?
Merci.
Mon code (CodeBlocks) est le suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> //Pour la fonction touper
int main()
{
char caractere = 0;
char reponse;
char motSecret[] = "GRAMME";
char* pointeurMotTaper = NULL;
int i = 0, j = 0, l = 0;
int compteurLettreDuMotSecret = 0;
int nombreDeCoups = 2;
/* Calcul du nombre de lettre de la variable motSecret */
for(l = 0; l < strlen(motSecret); l++)
{
compteurLettreDuMotSecret++;
}
printf("Mot secret a %d octets et %d lettres\n\n", strlen(motSecret), compteurLettreDuMotSecret);
pointeurMotTaper = malloc(compteurLettreDuMotSecret*sizeof(int));//Affectation de la mémoire
if(pointeurMotTaper == NULL)
{
exit(0);
}
else
{
while(reponse != 'n')//Pour quitter le programme
{
do
{
//compteur++;
printf("Tapez un caractere : ");
caractere = getchar();
caractere = toupper(caractere);
getchar();// Pour vider le buffer (la memoire)
if(strchr(motSecret, caractere) != NULL)
{
nombreDeCoups = nombreDeCoups;
}
else
{
nombreDeCoups -= 1;
}
/* Affectation du caractère tapé s'il est identique à un caractère du mot secret */
for(i = 0; i < compteurLettreDuMotSecret; i++)
{
if(caractere == motSecret[i])
{
*(pointeurMotTaper + i) = motSecret[i];
}
}
/* Lecture du caractère tapé s'il est identique à un caractère du mot secret */
for(j = 0; j < compteurLettreDuMotSecret; j++)
{
if(*(pointeurMotTaper + j) == motSecret[j])
{
printf("%c", *(pointeurMotTaper + j));
}
else
{
printf("*");
}
}
printf("\nIl vous reste %d coups\n\n", nombreDeCoups);
if((strcmp(motSecret, pointeurMotTaper)) == 0)
{
printf("\tBRAVO ! le mot secret est bien %s\n\n", pointeurMotTaper);
}
}while((nombreDeCoups > 0) && !(strcmp(motSecret, pointeurMotTaper)) == 0);
free(pointeurMotTaper);//Libération de la mémoire
}
return 0;
}