Pourquoi mon code ne marche pas correctement ? [Résolu]

Signaler
Messages postés
3
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
5 décembre 2008
-
Messages postés
3
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
5 décembre 2008
-
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;


}

3 réponses

Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
Slt,
je peux juste t'aider pour le mot "programme", car au début du pgm, tu dit de calculer automatiquement la longueur de la chaine avcec gramme (6 acractères), donc quand tu veux mettre un mot plus long, il n'y a pa assez de place dans le tableau !
Je te conseillerais de remplacer

char motSecret[] = "GRAMME";

par :

char motSecret[50] = "INIT";//Tu peux y caser un mot long de 50 lettre au maxi

et pour le fait qu'il ne se stop pas, il me semble qu'il faudrait remplacer :
if((strcmp(motSecret, pointeurMotTaper)) == 0)
par:
if( strcmp(motSecret, pointeurMotTaper) == 0)
mais je n'ai pas testé et je ne suis pas sûr... mais cet une hypothèse


Cordialement, B@stien.//@++ Sondage
Messages postés
3
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
5 décembre 2008

Effectivement, en modifiant char motSecret[] = "GRAMME"; par : char motSecret[50] = "INIT"; , j'ai résolu le problème en ce qui concerne les mots de longue taille.Mais le remplacement de if((strcmp(motSecret, pointeurMotTaper)) 0) par: if( strcmp(motSecret, pointeurMotTaper) 0) ne résout encore pas le problème d'arrêt lorsque les lettres du mot secret sont bien taper.
Messages postés
3
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
5 décembre 2008

Merci,
En mettant également la même taille aux deux tableaux (char motSecret[50]; et char motTaper[50];) mon code marche correctement.