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 :

Problème dans un petit programme


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Problème dans un petit programme
    Bonjour à tous, je suis en licence 3 spé Génie Civil à cergy et je dois faire un petit programme dont le sujet est la réalisation du jeu du pendu. Je suis débutant en langage C et je ne comprend pas pourquoi mon petit programme ne fonctionne pas :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <time.h>
     
     
    ////////////////////////////////////////////////
    //                FONCTIONS                   //
    ////////////////////////////////////////////////
     
     
    char readCharacter()
    {
         char character=0;
         character=getchar();
         character=toupper(character);
         while (getchar() != '\n');
     
         return character;
    }
     
     
     
     
    ////////////////////////////////////////////////
    //             FONCTION PRINCIPALE            //
    ////////////////////////////////////////////////
     
     
     
     
    int main()
    {
         char WordSecret[100]="MAXIME";
         char Letter;
         int Lengthword=6;
         int i=0;
         char MotATrouvee[100];
         int NombreDeCoup=10;
         int NombreLettretrouvee=0;
     
     
              printf("\n\nBienvenu dans le jeu du Pendu!!!\n\n");
     
              printf("Voici le mot secret que vous devez decouvrir:\n\n");
     
         for (i = 0;WordSecret[i]!='\0'; i++)
         {
             MotATrouvee[i]= '-';
         }
     
             printf("%s\n",MotATrouvee);
     
     
     
     
     do
        {       
                printf("\n\nveuillez saisir une lettre:\n");
                Letter=readCharacter();
     
     
             for (i = 0;WordSecret[i]!='\0'; i++)
          {
                 if (WordSecret[i] == Letter)
             {
                 MotATrouvee[i]=Letter;
                 NombreLettretrouvee++;
                 printf("\n%s",MotATrouvee);
                     if (NombreLettretrouvee==Lengthword)
                     {
                     printf("\nFELICITATION!!! Vous avez trouve le mot secret\n");
                     }
                     else
                     {
                     printf("\nVous avez trouvez %d lettre, il vous reste encore %d essai(s) pour trouver le mot secret\n\n",NombreLettretrouvee,NombreDeCoup);
     
                     }
     
             }
                 else
             {
                     NombreDeCoup=NombreDeCoup-1;
                     if (NombreDeCoup==0)
                     {
                     printf ("\nVous etes PENDU!!! le mot secret etait %s\n",WordSecret);
                     }
                     else
                     {
                     printf("\nVous n'avez pas trouvez de lettre, il vous reste encore %d essai(s) pour trouver le mot secret\n\n",NombreDeCoup);
                     printf("\n%s\n\n",MotATrouvee);
     
                     }
             }
          }
     
     
      }  while(NombreDeCoup>0 || NombreLettretrouvee!=Lengthword);
        system ("PAUSE");
        return 0;
    }
    Pou l'instant j'ai choisi moi méme le mot à trouver par la suite il faudra que j'aille le piocher dans des fichiers de différents niveau de difficulté
    Merci d'avance à ceux qui vont essayer de m'aider.

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    bonjour,

    problee d'algoritme, tu fais a chaque test de lettre le traitement que tu devrais faire apres avoir "analyser" toute la chaine.

    en gros ca donne ca :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <time.h>
     
     
    char readCharacter()
    {
        char character=0;
        character=getchar();
        character=toupper(character);
        while (getchar() != '\n');
     
        return character;
    }
     
    #define BOOL    int
    #define TRUE    1
    #define FALSE   0
     
    int main( void )
    {
        char WordSecret[100]="MAXIME";
        char Letter;
        int Lengthword=6;
        int i=0;
        char MotATrouvee[100];
        int NombreDeCoup=10;
        int NombreLettretrouvee=0;
        BOOL trouve_lettre = FALSE;
     
     
        printf("\n\nBienvenu dans le jeu du Pendu!!!\n\n");
     
        printf("Voici le mot secret que vous devez decouvrir:\n\n");
     
        for (i = 0;WordSecret[i]!='\0'; i++)
        {
            MotATrouvee[i]= '-';
        }
     
        /* lui aussi faut le terminer par un '\0' */
        MotATrouvee[i] = '\0';
     
        printf("%s\n",MotATrouvee);
     
        do
        {
            printf("\n\nveuillez saisir une lettre:\n");
            Letter=readCharacter();
     
            for (i = 0;WordSecret[i]!='\0'; i++)
            {
                if (WordSecret[i] == Letter)
                {
                    MotATrouvee[i]=Letter;
                    NombreLettretrouvee++;
                    trouve_lettre = TRUE;
                }
            }
     
            if( trouve_lettre == TRUE )
            {
                if (NombreLettretrouvee==Lengthword)
                {
                    printf("\nFELICITATION!!! Vous avez trouve le mot secret\n");
                }
                else
                {
                    printf("\nVous avez trouvez %d lettre, il vous reste encore %d essai(s) pour trouver le mot secret\n\n",NombreLettretrouvee,NombreDeCoup);
     
                }
            }
            else
            {
                if (NombreDeCoup==0)
                {
                    printf ("\nVous etes PENDU!!! le mot secret etait %s\n",WordSecret);
                }
                else
                {
                    printf("\nVous n'avez pas trouvez de lettre, il vous reste encore %d essai(s) pour trouver le mot secret\n\n",NombreDeCoup);
                    /*printf("\n%s\n\n",MotATrouvee);*/
                }
            }
     
            printf("\n%s\n",MotATrouvee);
     
            NombreDeCoup=NombreDeCoup-1;
            trouve_lettre = FALSE;
     
        /* le test avec && marche mieux */
        }  while (NombreDeCoup>0 && NombreLettretrouvee!=Lengthword);
     
        system ("PAUSE");
        return 0;
    }
    Comme c'etait avant, si on trouve deux fois la lettre on affiche deux fois les message...

    voila, bon courage

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour cet réponse mais il y a un petit problème vu qu'en cours j'ai pas appris à utiliser les bouléen. Donc si je rend mon programme au prof avec des bouléens il va se douter que ça vient pas de moi lol.
    En fait, le prof voudrait que je fasse 2 fonction en plus de readcharacter:une pour vérifier qu'on a gagné et une pour savoir si la lettre proposé "letter" est contenue dans le mot caché "wordsecret" de longueur "lengthword".

    Mais moi j'avais tout écris dans le programme principal et je sais pas trop comment faire pour faire passer certaine parti du main en fonction.
    Merci encore

  4. #4
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    Re,

    pour ce qui est des booleens, c'est pas grand chose, juste 3 define, mais si ca gene suffit de remplacer BOOl par int, TRUE par 1 et FALSE par 0.


    Pour le decoupage en fonction ben le bout de code qui verifie la presence d une lettre tu l as deja, suffit de faire comme readCaractere, declarer la fonction au dessus du main, lui passer les bons parametres et copier le bout de code qui fait la verif. Rien de bien méchant.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ha ok merci, c'est rien en fait les booléens. Par contre j'ai pas compris à quoi ça servait de rajouter cette ligne "MotATrouvee[i] = '\0';". Dans le while les 2 '&' signifie également 'ou'? Je voudrais savoir aussi si à la place de != ds "WordSecret[i]!='\0' " dans "for (i = 0;WordSecret[i]!='\0'; i++)" on remplace par = ou ==.

    G remarqué aussi qu'il y avait un probléme lorsque on tape une lettre qu'on avait déjà trouvé le programme fait comme si on avait trouvé une nouvelle lettre donc si on tape 3 fois le "M" on aura gagné. Pour remédier à ce probléme, je doit rajouter une condition mais je sais pas trop où la placer.

    @+

  6. #6
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    Bonjour,

    dans l ordre

    "à quoi ça servait de rajouter cette ligne "MotATrouvee[i] = '\0';" ?
    parce que en C le '\0' est le marqueur de fin de chaine. Si on le met pas printf (et toutes les autres fonctions de manip de chaines) ne savent pas quand arreter ce quelles font (pour printf, c est afficher une caractere jusqu a ce qu elle rencontre le '\0').

    "Dans le while les 2 '&' signifie également 'ou'?"
    non, c est "et", on continue tant que aucune des deux n'est atteinte.
    Des qu une est remplie on arrete la boucle car on a soit atteint le nombre max de coup, soit trouvé le mot.

    "Je voudrais savoir aussi si à la place de != ds "WordSecret[i]!='\0' " dans "for (i = 0;WordSecret[i]!='\0'; i++)" on remplace par = ou ==."
    non, tu parcours ta chaine tant que t as pas rencontré le marqueur de fin de chaine ('\0'), c est bien ce que tu fait.

    Pour la condition, quand tu verifies si la lettre est dans le mot a trouver, juste apres tu peux faire une verification dans le mot "caché" pour voir si elle s'y trouve (avec a peu pres la meme boucle que sur le mot a trouver). Si oui decrémentation du nombre de coup et une petite insulte au joueur pour lui dire que c'est un boulet, et demander la lettre suivante, donc repartir en debut de boucle.

    Voila, bon courage

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    salut, je comprend pas pourquoi quand le joueur tape une lettre qu'il a déjà trouvé ça lui affiche pas mon petit message "vous avez déjà siasi cette lettre, veuillez en saisir une autre:"

    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
     for (i = 0;WordSecret[i]!='\0'; i++)
            {
                  if(MotATrouvee[i] == Letter)
                {
                  printf(vous avez déjà siasi cette lettre, veuillez en saisir une autre:");
     
     
                }
     
     
                if(WordSecret[i] == Letter)
                {
                    MotATrouvee[i]=Letter;
                    NombreLettretrouvee++;
                    trouve_lettre = OUI;
     
                }
             }
    merci @+

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est bon j'ai trouvé

Discussions similaires

  1. probléme dans un simple programme
    Par maydarak1 dans le forum C
    Réponses: 1
    Dernier message: 28/02/2010, 10h54
  2. problème d'arguments dans un petit programme
    Par chicabonux dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/09/2009, 09h47
  3. Un petit problème dans un petit algo!
    Par Pierre-Hakim dans le forum Général Python
    Réponses: 3
    Dernier message: 29/10/2008, 23h29
  4. Problème dans un petit programme !
    Par Cody082 dans le forum Langage
    Réponses: 11
    Dernier message: 17/10/2007, 08h20
  5. évènement non prévu dans un petit programme
    Par flamant dans le forum C++
    Réponses: 3
    Dernier message: 18/01/2007, 21h56

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