Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tp pendu

    28 novembre 2020 à 23:32:06

    Bonjour à tous,

    J'ai commencé le tp pendu demandé dans le livre (ou sur le site). Je suis conscient que le programme est encore très incomplet vu que je l'ai commencé, mais mon problème vient de ces deux boucles while. En effet, dès que je fait la première saisie le programme se termine tout de suite.

    PS : La ligne ma_lettre = lire_caractere() sert de saisie de caractère comme c'était expliqué dans livre.

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2020 à 23:43:31

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2020 à 0:21:11

        Bonjour ! Attention de ne pas confondre = et ==, c'est une erreur plus que courante et je crois que tu l'as faite.
        • Partager sur Facebook
        • Partager sur Twitter
          29 novembre 2020 à 16:33:50 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


            29 novembre 2020 à 16:41:17

            Hello,

            Non, le problème c'est que, comme beaucoup de débutants, tu oublies qu'une chaine de caractères en C se termine par le caractère '\0'.

            Et qu'il faut

            • allouer de la place pour ce cractère supplémentaire
            • mettre explicitement le '\0'
            char s[]="Il faut un \\0";
            int len=strlen(s);
            char *new_word=malloc(len+1);
            new_word[len]='\0';

            Et pas de printscreen stp,

            -
            Edité par edgarjacobs 29 novembre 2020 à 16:42:53

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              29 novembre 2020 à 16:47:15

              Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).

              • Partager sur Facebook
              • Partager sur Twitter
                29 novembre 2020 à 16:50:49 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


                  29 novembre 2020 à 16:52:19

                  Hé ho, on te demande de poster convenablement ton code !

                  -
                  Edité par edgarjacobs 29 novembre 2020 à 16:52:48

                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                    29 novembre 2020 à 17:28:17

                    edgarjacobs a écrit:

                    Hé ho, on te demande de poster convenablement ton code !

                    -
                    Edité par edgarjacobs il y a 33 minutes

                    désolé j'avais mal compris le fait qu'on ne pouvais pas poster d'image 
                    #include <stdio.h>
                    #include <stdlib.h>
                    #include "saisie_caractere.h"
                    #include <string.h>
                    void jeu_pendu()
                    {
                        int a=9,nombre_occurence=1,position,*nombre_de_caractere_requis=NULL,iterateur;
                        char mot_secret[]="AMALGAME";
                        char ma_lettre, *tab= NULL;
                        char *booleen=NULL, *booleen_deux=NULL;
                        int len = strlen(mot_secret);
                        nombre_de_caractere_requis = malloc((len+1)*sizeof(char));//on alloue de la mémoire pour le mot de test
                        for(iterateur=0;tab[iterateur]!='/0';iterateur++) {tab[iterateur]='_';}//on remplace la chaîne tab par des _
                        printf("Quel est le mot secret ? Entrez une lettre  ");
                        ma_lettre = lire_caractere();
                        booleen = strchr(mot_secret,ma_lettre);
                        while(a!=0)
                        {
                            while ((booleen==NULL)&&(a!=0))
                            {
                             printf("la lettre que vous avez mis ne se trouve pas dans le mot secret il vous reste %d essais  %s  ",a,tab);
                             ma_lettre = lire_caractere();
                             booleen = strchr(mot_secret,ma_lettre);
                             a--;
                            }
                            while((booleen!=NULL)&&(a!=0))
                            {
                             booleen = strchr((booleen + 1),ma_lettre);//on recherche la seconde occurence du caractère pour voir si il y en a deux
                             booleen_deux = (char *) memchr(mot_secret,ma_lettre,strlen(mot_secret));
                    
                             while(booleen!=NULL)
                             {
                               booleen = strchr((booleen+1),ma_lettre);
                               nombre_occurence++;
                             }
                             printf("bravo vous avez reussi a trouver une lettre a la position %d il est de %d occurence! il vous reste %d essais  %s  ",booleen_deux-mot_secret+1,nombre_occurence,a,tab);
                             ma_lettre = lire_caractere();
                             nombre_occurence=1;
                             booleen = strchr(mot_secret,ma_lettre);
                             a--;
                            }
                        }
                        if(a==0) {printf("desole vous avez perdu la partie \n");}
                    
                        free (nombre_de_caractere_requis);



                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 novembre 2020 à 17:35:24

                      Re,-

                      Ligne 13: c'est \0, pas /0

                      Et à quoi set nombre_de_caractere_requis ?

                      • Partager sur Facebook
                      • Partager sur Twitter

                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                        29 novembre 2020 à 17:50:13

                        en plus, comme robun l'a dis plus tôt, à la ligne 16 tu utilise = au lieu de ==. Si tu ne corrige pas cela, tu vas te retrouver avec une boucle infinie et booleen qui vaudras toujours NULL !
                        • Partager sur Facebook
                        • Partager sur Twitter

                        La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

                        Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

                          29 novembre 2020 à 18:00:16

                          Ligne 16 ? Mais ce n'est pas un test ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 novembre 2020 à 18:04:41

                            edgarjacobs a écrit:

                            Re,-

                            Ligne 13: c'est \0, pas /0

                            Et à quoi set nombre_de_caractere_requis ?

                            je n'ai pas compris ta question. Est-ce que tu parles du type ? si c'est ça alors c'est un pointeur int que j'ai déclaré dans la prémière ligne avec initialisation NULL.

                            Durza 42 a écrit:

                            en plus, comme robun l'a dis plus tôt, à la ligne 16 tu utilise = au lieu de ==. Si tu ne corrige pas cela, tu vas te retrouver avec une boucle infinie et booleen qui vaudras toujours NULL !


                            J'ai corrigé ce problème dans les boucles while. Cette ligne sert à affecter au pointeur booleen la fonction strchr pour rechercher dans la chaîne le caractère saisie

                            -
                            Edité par RachidBaridi 29 novembre 2020 à 18:06:01

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 novembre 2020 à 18:12:51

                              RachidBaridi a écrit:

                              edgarjacobs a écrit:

                              Et à quoi sert nombre_de_caractere_requis ?

                              je n'ai pas compris ta question. Est-ce que tu parles du type ? si c'est ça alors c'est un pointeur int que j'ai déclaré dans la prémière ligne avec initialisation NULL.

                              Tu assignes le retour de malloc() à cette variable, mais tu n'utilises jamais cette variable (à part pour pour le free()). Donc je me demande à quoi elle sert. Supprime-là de ton programme, ça ne changera rien.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                29 novembre 2020 à 18:20:25

                                C'est plutôt le pointeur tab qu'il faudrait initialisé avec un bloc mémoire valide !

                                PS : Aère ton code, tu y verras plus clair !

                                -
                                Edité par rouloude 29 novembre 2020 à 18:21:43

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Tp pendu

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown