Partage
  • Partager sur Facebook
  • Partager sur Twitter

apprenez a programmer en c

jeu du pendue

Sujet résolu
    27 juin 2020 à 14:43:35

    j'aimerais savoir pourquoi ce programme fait n'importe quoi. le programme complet:

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include "main.h"
    
    int main()
    {
        /*Variables*/
        char mot_cache[]="MARBRE";
        char mot_secret[]="******";
        int longueur_mot=0;
        char lettre=0;
        int i=0,coup=10,lettres_trouvees[6]={0};
    
        /*intro*/
        printf("bienvenue dans le jeu du pendue!\n");
        printf("Je vais vous donner un mot cache que vous allez essayer de trouver,\n");
        printf("Bonne chance<3\n");
        printf("NB: toute les lettre sont en majuscule!\n\n");
        longueur_mot=strlen(mot_cache);
        printf("le mot cache en %d lettres est: %s \n",longueur_mot,mot_secret);
    
        /*====================le jeu======================*/
        while((coup>0)&&(strcmp(mot_cache,mot_secret)!=0 ))
        {
            printf("\nil vous rest %d coup\n",coup);
            printf("quel est le mot?, %s\n",mot_secret);
    
            /*getting letter*/
            printf("donner une lettre:");
            lettre = lirecaractere();
    
            /*function*/
            if (lettersearch(lettre,mot_cache,lettres_trouvees))
            {
                for(i=0;i<longueur_mot;i++)
                {
                    printf(";%d;",lettres_trouvees[i]);
                }
                for(i=0;i<longueur_mot;i++)
                {
                    if (lettres_trouvees[i])
                    {
                        mot_secret[i]=mot_cache[i];
                    }
                }
            }else coup--;
        }
        return 0;
    }
    /*lecture de caractere*/
    char lirecaractere()
    {
        char caractere = 0;
    
        caractere = getchar(); // On lit le premier caractère
        caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
    
        // On lit les autres caractères mémorisés un à un jusqu'au \n (pour les effacer)
        while (getchar() != '\n') ;
    
        return caractere; // On retourne le premier caractère qu'on a lu
    }
    /*recherche de caractere*/
    int lettersearch(char lettre,char mot_cache[],int lettres_trouvees[])
    {
        int i=0,bonne_lettre=0;
    
        for (i=0;mot_cache[i]!='\n';i++)
        {
            if (lettre==mot_cache[i])
            {
                lettres_trouvees[i]=1;
                bonne_lettre=1;
            }
        }
        return bonne_lettre;
    }
    



    d'ou je pense que l'erreur vien:

    if (lettres_trouvees[i])
    {
       mot_secret[i]=mot_cache[i];
    }

    et enfin un l'erreur:

    merci de répondre.

    ..
    Detected language : French

    -
    Edité par larbibenmoussa 27 juin 2020 à 15:40:48

    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2020 à 22:56:24

      Bonjour,

      ligne 19, tu cherches un hypothétique caractère '\n' qui terminerait ton mot, tu as dû confondre avec '\0'. Ce traitement bien au-delà de la fin de la chaîne doit faire de sérieux dégâts en mémoire.

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        27 juin 2020 à 23:02:45

        Bonjour,

        Tout d'abord, dans tes includes, je vois

        #include "main.h"

        A vrai dire ce n'est pas une bonne pratique de mettre ta fonction main dans un header. En effet, tu veux qu'elle ne soit accessible que à partir d'un seul endroit, ce doit être le squelette de ton programme, donc la mettre dans un header n'est pas utile car tu ne l’appelleras nul part dans ton code.

        Ensuite, peux tu expliquer plus en détail ce que tu entends par n'importe quoi ?

        Et pour finir, quand une fonction ne prend pas d'argument en C, n'hésites pas à mettre (void) dans les parenthèses, en effet,

        int main (void)

        En effet en C, si tu ne précises pas void, cela ne signifie pas que ta fonction ne prend pas d'argument, mais qu'elle en prend un nombre indéfini, de type indéfini, ce qui peut poser de gros problèmes de sécurité.



        • Partager sur Facebook
        • Partager sur Twitter

        “Any fool can write code that a computer can understand.

        Good programmers write code that humans can understand.” -- Martin Fowler

          27 juin 2020 à 23:52:25

          Pour afficher un caractère, c'est %c, pas %d
          • 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

            28 juin 2020 à 10:12:33

            Grizzlyman a écrit:

            Bonjour,

            Tout d'abord, dans tes includes, je vois

            #include "main.h"

            A vrai dire ce n'est pas une bonne pratique de mettre ta fonction main dans un header. En effet, tu veux qu'elle ne soit accessible que à partir d'un seul endroit, ce doit être le squelette de ton programme, donc la mettre dans un header n'est pas utile car tu ne l’appelleras nul part dans ton code.

            Ensuite, peux tu expliquer plus en détail ce que tu entends par n'importe quoi ?

            Et pour finir, quand une fonction ne prend pas d'argument en C, n'hésites pas à mettre (void) dans les parenthèses, en effet,

            int main (void)

            En effet en C, si tu ne précises pas void, cela ne signifie pas que ta fonction ne prend pas d'argument, mais qu'elle en prend un nombre indéfini, de type indéfini, ce qui peut poser de gros problèmes de sécurité.



            par n'importe quoi je parler des smiley qui s'affiche .et pour le main.h ce n'est pas ma fonction principal c un header de mon programme principal main.c je c je suis pas très imaginatif en nomination mais bon .

            et enfin merci de  ta réponse.

            dredre
            nom:
            • Sigle de direction régionale de l'équipement.
              undefined
            Detected language : French
            • Partager sur Facebook
            • Partager sur Twitter
              29 juin 2020 à 18:17:08

              Dalfab a écrit:

              Bonjour,

              ligne 19, tu cherches un hypothétique caractère '\n' qui terminerait ton mot, tu as dû confondre avec '\0'. Ce traitement bien au-delà de la fin de la chaîne doit faire de sérieux dégâts en mémoire.


              c’était bien le problème merci beaucoup.
              • Partager sur Facebook
              • Partager sur Twitter
                30 juin 2020 à 10:26:00

                salut j'ai un devoir en c mais le probleme est que j'ai manquer beaucoup de cours.

                svp si quelque peut m'aider avec s'est question

                I. Définition des fonctions

                #define DIM1 20

                #define DIM2 400

                typedef float TLigne [DIM2] ;

                typedef TLigne TMatrice[DIM1] ;

                1. Ecrire la fonction void ChargerTab(TLigne tab, int ∗n)qui permet de stocker en mémoire dans

                le tableau tab un nombre de valeurs réelles pointé par n. Le nombre *n doit également être lu par cette

                fonction (qui doit donc le transmettre au programme appelant).

                2. Ecrire la fonction void EditerTab(TLigne tab,int n) qui permet d’afficher les n valeurs réelles

                stockées dans le tableau tab.

                3. Ecrire la fonction void InsererTab(TLigne tab , int *n, float val, int pos) qui insère

                l’élément val à la position pos dans le tableau tab et met à jour le nombre *n.

                4. Ecrire la fonction void SupprimerTab(TLigne tab , int *n, float val) qui supprime toutes

                les occurrences de val dans le tableau tab et met à jour le nombre d’éléments *n.

                5. Ecrire la fonction void SupprimerDoubTab(TLigne tab , int *n) qui supprime tous les doublons

                dans le tableau tab et met à jour le nombre d’éléments *n.

                6. Ecrire la fonction float SommeTab(TLigne tab,int n)qui retourne la somme des n valeurs réelles

                stockées dans le tableau tab.

                7. Ecrire la fonction float MoyenneTab(TLigne tab,int n)qui retourne la moyenne des n valeurs

                réelles stockées dans le tableau tab. Cette fonction devra impérativement utiliser la fonction SommeTab écrite

                précédemment.

                8. Ecrire les fonctions float MaxTab(TLigne tab,int n)et float MinTab(TLigne tab,int

                n) qui retournent respectivement la valeur maximale et la valeur minimale des n valeurs réelles stockées dans

                le tableau tab.

                9. Ecrire les fonctions int iMaxTab(TLigne tab,int n)et int iMinTab(TLigne tab,int n)

                qui retournent respectivement l’indice du maximum et l’indice du minimum des n valeurs réelles stockées

                dans le tableau tab.

                10. Ecrire la fonction int RangMinTab(TLigne tab,int n, int p) qui retourne le rang de la plus

                petite des valeurs réelles contenues dans le tableau tab à partir du rang p.

                11. Ecrire la fonction int RechElt(TLigne tab, int n, float val) qui retourne le rang de la

                première occurrence de la valeur réelle val dans le tableau tab, contenant n valeurs significatives, ou -1 si

                val est absente.

                12. Ecrire la fonction int RechOcc(TLigne tab, int n, int id, float val) qui retourne le

                rang de la première occurrence de la valeur réelle val dans le tableau tab considéré à partir du rang id (ou -

                1 si val est absente).

                13. Ecrire la fonction int NbOcc(TLigne tab, int n, float val) qui retourne le nombre

                d’occurrences de la valeur val dans le tableau tab.

                14. Ecrire la fonction int SupValTab(TLigne tab, int n, float val)qui retourne le nombre de

                valeurs du tableau tab qui sont supérieures à la valeur val passée en paramètre.

                15. Ecrire la fonction void Permuter(float ∗A, float ∗B) qui permute les valeurs réelles contenues

                dans *A et *B.

                16. Ecrire la fonction void CopierTab(TLigne tabCopie, int *n2,TLigne tabOriginal,

                int n1) qui copie le contenu du second tableau dans le premier tableau et met à jour *n2, le nombre

                d’éléments de tabcopie.

                Année académique 2019-2020

                Classe : L1IT/FPC-L1ELN/FPC

                2

                17. Ecrire la fonction void TriSelMin(TLigne tab, int n) qui permet de trier par ordre croissant,

                suivant la méthode du tri par sélection du minimum, les n valeurs réelles contenues dans le tableau tab.

                18. Ecrire la fonction void TriBulle(TLigne tab, int n) qui permet de trier par ordre croissant,

                suivant la méthode du tri par bulle, les n valeurs réelles contenues dans le tableau tab.

                19. Ecrire la fonction void TriInsertion(TLigne tab, int n) qui permet de trier par ordre croissant,

                suivant la méthode du tri par insertion, les n valeurs réelles contenues dans le tableau tab.

                20. Ecrire la fonction int Dichot(TLigne tab, int n, float val) qui retourne le rang de la première

                occurrence de la valeur réelle val dans le tableau ordonné tab contenant n valeurs significatives, ou -1 si

                val est absente.

                21. Ecrire la fonction void InsererTabTrie(TLigne tab, int *n, float val) qui insère l’élément

                val à sa bonne place dans le tableau ordonné tab et met à jour le nombre d’éléments pointé par n.

                22. Ecrire la fonction void FusionnerTab (TLigne tab1, int n1, TLigne tab2, int n2,

                TLigne tab, int *n) qui regroupe toutes les valeurs de tab1 et tab2 dans le tableau tab et met à

                jour *n, le nombre d’éléments de tab.

                23. Ecrire la fonction void ChargerMat(TMatrice mat, int *nblig, int *nbcol) qui permet

                de stocker en mémoire dans le tableau mat *nblig x *nbcol valeurs réelles. Les nombres de lignes *nblig

                et de colonnes * nbcol doivent également être lus par cette fonction.

                24. Ecrire la fonction void TrianglePascal(TMatrice mat, int n) permettant de remplir les cases

                du tableau mat avec les coefficients du triangle de Pascal d’ordre n.

                25. Ecrire la fonction void EditerLigMat(TMatrice mat, int nblig, int nbcol) qui permet

                d’afficher ligne par ligne le tableau mat.

                26. Ecrire la fonction void EditerColMat(TMatrice mat, int nblig, int nbcol) qui permet

                d’afficher colonne par colonne le tableau mat.

                27. Écrire la fonction float SommeLigMat(TMatrice mat, int nblig, int nbcol,int

                numlig) permettant de calculer la somme des éléments de la ligne numlig.

                28. Écrire la fonction float SommeColMat(TMatrice mat, int nblig, int nbcol,int

                numcol) permettant de calculer la somme des éléments de la colonne numcol.

                29. Ecrire la fonction float MoyenneLigMat(TMatrice mat, int nblig, int nbcol,int

                numlig) qui retourne la moyenne des éléments de la ligne numlig.

                30. Ecrire la fonction float MoyenneColMat(TMatrice mat, int nblig, int nbcol,int

                numcol) qui retourne la moyenne des éléments de la colonne numcol.

                31. Ecrire les fonctions float MaxLigMat(TMatrice mat, int nblig, int nbcol,int

                numlig)et float MinLigMat(TMatrice mat, int nblig, int nbcol,int numlig) qui

                retournent respectivement la valeur maximale et la valeur minimale des éléments de la ligne numlig.

                32. Ecrire les fonctions float MaxColMat(TMatrice mat, int nblig, int nbcol,int

                numcol)et float MinColMat(TMatrice mat, int nblig, int nbcol,int numcol) qui

                retournent respectivement la valeur maximale et la valeur minimale des éléments de la colonne numcol.

                33. Écrire la fonction void SatistiquesMat(TMatrice mat, int nblig, int nbcol,float*

                som, float* moy, float* min, float* max) permettant de calculer la somme, la moyenne, le

                minimum et le maximum des éléments du tableau mat.

                34. Écrire la fonction void PermuterLigMat(TMatrice mat,int nblig, int nbcol,int

                numlig1, int numlig2) permettant de permuter les lignes numlig1et numlig2 du tableau mat.

                35. Écrire la fonction void PermuterColMat(TMatrice mat, int nblig, int nbcol,int

                numcol1, int numcol2) permettant de permuter les colonnes numcol1 et numcol2 du tableau mat.

                36. Écrire la fonction void AdditionnerMat(TMatrice mat1, TMatrice mat2, TMatrice

                mat, int nblig, int nbcol) permettant d’additionner les tableau mat1 et mat2 nblig x nbcol

                dans le tableau mat.

                37. Écrire la fonction void MultiplierMat(TMatrice mat1, int nblig1, int nbcol1,

                TMatrice mat2, int nblig2, int nbcol2, TMatrice mat, int *nblig, int

                *nbcol) permettant de multiplier, si cela est possible, le tableau mat1 par le tableau mat2 dans le tableau

                mat en déterminant ses nombres de lignes et de colonnes *nblig, *nbcol. Au cas où la multiplication n’est

                pas possible, afficher un message et donner à *nblig et *nbcol -1.

                38. Ecrire la fonction void transpositionMat(TMatrice mat, int nblig, int nbcol)qui

                effectue la transposition de la matrice mat dans elle-même.

                39. Écrire la fonction void MinMaxMat(TMatrice mat,

                • Partager sur Facebook
                • Partager sur Twitter

                Pigeon

                  30 juin 2020 à 10:37:58

                  Si tu as loupé beaucoup de cours, le meilleur moyen de te rattraper c'est de faire tes exercices.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 juin 2020 à 14:43:54

                    c'est vrai mais le jour du remise du devoir ça n'attend pas

                    -
                    Edité par Zunus 30 juin 2020 à 14:47:11

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Pigeon

                      30 juin 2020 à 16:32:07

                      C'est pour ça qu'il ne faut pas que tu perdes de temps, ce qui va être le cas si tu attends qu'on te fasse tes 39 exercices ici.

                      Comme tu es passionné de programmation de jeux videos, ça ne devrait pas être difficile.

                      Si tu as des problèmes avec un exercice particulier, tu nous montres le code de ce que tu as fait, et une description du problème rencontré. Là on pourra t'aider.

                      -
                      Edité par michelbillaud 30 juin 2020 à 16:37:18

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 juin 2020 à 23:46:40

                        Quelqu'un connaît-il la fable du Lièvre et de la Tortue? Ou bien c'est la Cigale et la Fourmi?

                        -
                        Edité par PierrotLeFou 30 juin 2020 à 23:49:33

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                        apprenez a programmer en c

                        × 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