IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

retour inattendu d'un tableau de char ?


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut retour inattendu d'un tableau de char ?
    bonjour,

    je suis débutant et essaie de faire un jeu de pendu a ma façon en C

    le programme fonctionne, cependant apres allocation de mémoire pour mon mot caché et son initialisation type ***** (les * seront remplacées par les lettres après leurs découvertes),

    lorsque je veux un mot de nb de lettre impaire, le mot cache s'affiche correctement *****, avec le bon nombre d'étoiles, par contre lorsqu'il s'agit d'un nombre paire alors là le mot apparait mais à la fin s'ajoute des caractères non souhaités, ******+des caractères bizarres...
    de ce fait, dans ces cas le programme ne s'arrête pas même si l'on a trouvé le bon mot...

    si vous avez des suggestions...

    je vous remercie

    le code est ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
     
    /*fonction pour enregistrer le caractère tapé et le mettre en majuscule avant de le retourner au main*/
     
    char lireCaractere()
    {
        char lettre = 0;
        printf("quelle lettre ? ");
        lettre=getchar();
        lettre=toupper(lettre);
        while (getchar()!='\n');    //vide le buffer
        printf("voici votre lettre = %c\n", lettre); //pour verifier
        return lettre;
    }
     
    char rechercheLettre (char lettre, int nbLettre, int* nbDeChance, char* motPendu, char* motPenduCache)
    {
        int j;
        int k=0;
        for (j=0;j<nbLettre;j++)
        {
            if (motPendu[j]== lettre)
            {
                k++; /*pour connaitre le nb de lettre trouvee appartenant au mot*/
                motPenduCache[j]=lettre; /*remplace le caractere "*" par la lettre trouvee*/
            }
        }
        if (k>0)
        {
            printf("bravo vous avez trouve %d lettre(s)\n", k);
            printf("voici le mot restant %s\n", motPenduCache); /*ecriture type "**E***"   */
        }else
        {
            printf("faux\n");
            (*nbDeChance)--;
            printf("il vous reste %d chance\n", *nbDeChance);
        }
    }
     
     
    int main (int argc, char* argv[])
    {
        int nbLettre=0;
        int nbDeChance=5;
        char lettre=0;
        char* motPendu=0;
        char* motPenduCache=0;
     
        /* choix du nombre de lettre pour le mot */
        printf("nombre de lettre ? ");
        scanf("%d", &nbLettre);
        /*allocation memoire pour les tableaux contenant le mot et sa version cache avec "*" */
        motPendu = malloc ((nbLettre+1) * sizeof(char)); /* (nbLettre + 1) afin de ne pas oublier '\0' */
        motPenduCache = malloc((nbLettre+1) * sizeof(char));
     
        /*choix du mot en respectant le nombre de lettre contenu dans le mot */
     
        do{
        printf("quel mot a deviner en %d lettres ? ", nbLettre);
        scanf("%s", motPendu);
        }while (strlen(motPendu)!=nbLettre);
     
        /* initialisation du mot cache avec a la place des caracteres des "*" */
     
        int i;
        for (i=0; i<nbLettre;i++)
        {
            motPenduCache[i]='*';
        }
        printf("voici le mot a trouve : %s\n", motPenduCache);
     
        /* vidage du buffer */
     
        while (getchar()!='\n');
     
        /* debut du jeu*/
     
        while (nbDeChance>0)
        {
            lettre = lireCaractere();
     
            /* est ce que la lettre appartient au mot cherche */
     
            rechercheLettre(lettre, nbLettre, &nbDeChance, motPendu, motPenduCache);
     
            /* lorsque l'on a trouve toutes les lettres du mot le jeu s'arrete */
     
            if (!(strcmp(motPenduCache, motPendu)))
            {
                printf("BRAVO\n\n\n");
                return;
            }
        }
     
        if (nbDeChance==0)
        {
            printf("desole vous avez perdu\n");
        }
     
        free(motPendu);
        free(motPenduCache);
    }

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Tu n'as pas ajouté le caractère de fin '\0' pour ton mot caché ;-) (Bien que tu aies réservé de la place pour).

Discussions similaires

  1. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  2. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo