Bonjour,
J'apprend le langage C depuis un petit moment déjà grâce à l'excellent tutorial de siteduzero.com et j'en suis à la partie où je dois réaliser mon propre jeu de pendu (avec un mot fixé à l'avance pour l'instant). J'ai cherché pendant plusieurs jours mon erreur mais je dois avouer que je ne la trouve pas. Evidemment, j'ai regardé sa solution et je comprend tout à fait la méthode mais je l'ai écrit différemment et j'obtiens un truc bizarroïde.
Voici le code (assez simple):
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // Biblio pour getchar()
#include <string.h> // Bibliothèque de manipulation des chaines
/* Règles du jeu de pendu:
* Trouver le mot caché en moins de 10 coups */
char lireCaractere();
char rechercheCaractere(char mot_cible[], char lettre_cible[]);
char decouverteMotEtoile(char motSecret[], char motEtoile[], char lettre[]);
int main(int argc, char **argv)
{
// Mot secret fixé avant le dictionnaire
char motSecret[] = "ESTUAIRE";
// Initialisation des différentes variables
char lettre_entree[] = "a";
int compteur = 10;
char motEtoile[] = " ";
int i = 0;
int longueur = 0;
// Génération du mot étoile
longueur = strlen(motSecret);
for (i = 0 ; i <= longueur; i++)
{
motEtoile[i] = '*';
}
// Boucle de récupération de la lettre
while (compteur > 0)
{
printf("Quel est le mot secret ? %s\n Proposez une lettre: ", motSecret);
*lettre_entree = lireCaractere();
decouverteMotEtoile(motSecret, motEtoile, lettre_entree);
printf("%s", motEtoile);
if(rechercheCaractere(motSecret, lettre_entree) == 0)
{
compteur--;
}
printf("Il vous reste %d coups !\n\n", compteur);
}
return 0;
}
// Acquisition de caractère
char lireCaractere()
{
char caractere = 0;
caractere = getchar(); // On lit le premier caractère
caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
// On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
while (getchar() != '\n') ;
return caractere; // On retourne le premier caractère qu'on a lu
}
// Fonction de recherche du caractère dans le mot secret
char rechercheCaractere(char mot[], char lettre[])
{
//~ char mot[] = "MARRON";
//~ char lettre[] = "R";
char *temp = NULL;
int compteur_lettredumot = 0;
temp = strpbrk (mot, lettre);
if (temp != NULL)
{
while (temp != NULL)
{
temp = strpbrk (temp+1, lettre);
compteur_lettredumot++;
}
printf("Effectivement, il y avait %d %s ! \n", compteur_lettredumot, lettre);
}
if (compteur_lettredumot == 0)
{
printf("Non, il n'y avait pas de %s ! \n", lettre);
return 0;
}
return 1;
}
// Fonction de découverte du mot secret (transformation des étoiles par les lettres trouvées)
char decouverteMotEtoile(char motSecret[], char motEtoile[], char lettre[])
{
int i = 0;
for (i = 0 ; i <= strlen(motSecret) ; i++)
{
if ( *lettre == motSecret[i] )
{
motEtoile[i] = motSecret[i];
}
}
printf("%s", motEtoile);
return 1;
}
J'arrive à générer un mot caché et chacune des parties du code marche séparément. Pourtant, quand je rentre une lettre correcte, il m'affiche n'importe quoi. Pourriez vous m'aider à trouver l'erreur ? Je pense qu'elle se cache parmis les pointeurs ou la gestion des tableaux.
Dernière modification par dbkblk (06-04-2011 06:55:20)
M. Gandhi: "C'est une erreur de croire nécessairement faux ce qu'on ne comprend pas."
C'est quoi ce bordel ?