Pourquoi mon code ne marche pas correctement ?

Résolu
magbouya Messages postés 3 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 5 décembre 2008 - 5 déc. 2008 à 18:42
magbouya Messages postés 3 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 5 décembre 2008 - 5 déc. 2008 à 23:21
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

BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
5 déc. 2008 à 20:37
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
3
magbouya Messages postés 3 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 5 décembre 2008
5 déc. 2008 à 21:49
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.
0
magbouya Messages postés 3 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 5 décembre 2008
5 déc. 2008 à 23:21
Merci,
En mettant également la même taille aux deux tableaux (char motSecret[50]; et char motTaper[50];) mon code marche correctement.
0
Rejoignez-nous