Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP Pendu cours C

    8 juin 2021 à 11:00:35

    Salut à tous.

    Après un bon moment de réflexion et d'incompréhension, j'ai finalement réussi mon TP sur le pendu du cours C!

    Alors je pense que je peux encore pas mal l'optimiser, mais j'aimerais déjà avoir votre avis dessus, voir ou j'ai fait fausse route.

    Le main() :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <ctype.h>
    #include "fonctionPendu.h"
    #define TAILLE_MAX 1000
    
    
    int main()
    {
        int rejouer = 1;
    
        do
    {
        char motSecret[TAILLE_MAX], motCache[TAILLE_MAX];
        motHasard(motSecret,motCache);
        int lettreChoisie = 0, i = 0,tailleTableau =strlen(motSecret);
        for (i = 0; i < tailleTableau; i++)
        {
            motCache[i] = '*';
        }
        printf("Bienvenue dans le pendu! Voici le mot a trouver : %s\n",motCache);
        int nombrecoup = 10;
           do
        {
    
            printf("Il vous reste %d coups,\nVeuillez entrez une lettre.\n",nombrecoup);
            lettreChoisie = lireCaractere();
            coup(motSecret,motCache,lettreChoisie,tailleTableau);
            printf("%s \n",motCache);
            nombrecoup --;
    
        }
        while  (strcmp(motSecret,motCache) != 0 && nombrecoup != 0);
    
        if (nombrecoup == 0)
        {
            printf("Desole tu as perdu. Le mot secret etait %s\n",motSecret);
        }
        else
        {
            printf("Bravo, tu as reussi!\n ");
        }
        printf("Veux tu rejouer? 1= OUI, 0 = NON\n");
        scanf("%d",&rejouer);
    }
    while (rejouer);
        return 0;
    }
    

    Et les fonctions :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <ctype.h>
    #define TAILLE_MAX 1000
    
    char lireCaractere();
    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
    }
    
    void coup (char *motSecret, char *motCache, int lettreChoisie, int tailleTableau);
    void coup (char *motSecret, char *motCache, int lettreChoisie, int tailleTableau)
    {
        int i = 0;
    
        for (i=0; i < tailleTableau;i++)
        {
            if (lettreChoisie == motSecret[i])
            {
                motCache[i]=lettreChoisie;
            }
        }
    }
    
    void lectureTableau (int tableau [], int tailleTableau);
    
    void lectureTableau (int tableau [], int tailleTableau)
    {
        int i = 0;
    
        for (i = 0; i < tailleTableau; i++)                 //Fonction pour faire la lecture des tableaux
        {
            printf("%d ",tableau[i]);
        }
        printf("Fin lecture \n");
    }
    
    void motHasard(char motTireAuSort[],char motCopie[]);
    
    void motHasard(char motTireAuSort[],char motCopie[])
    {
        srand(time(NULL));
        FILE *fichier = NULL;
        int nombreDeLigne = 0, nombreMystere = 0, MIN = 0, i = 0;
        fichier = fopen("Bibliothèque de mot pendu.txt","r");
        if (fichier != NULL)
        {
            while (fgets(motTireAuSort, TAILLE_MAX, fichier) != NULL)
            {
                nombreDeLigne ++;
            }
            nombreDeLigne --;
            rewind(fichier);
            nombreMystere = (rand() % (nombreDeLigne - MIN + 1)) + MIN;
            for (i = 0; i != nombreMystere; i++)
            {
                fgets (motTireAuSort,TAILLE_MAX,fichier);
    
            }
        }
        fclose(fichier);
        strcpy (motCopie,motTireAuSort);
        return 0;
    }
    

    Au niveau de ma fonction coup, elle prend 4 infos, ca me parait beaucoup pour une seule fonction, vous en pensez quoi?

    Voila, désolé si c'est pas ultra lisible, j'ai encore un peu du mal avec ca.




    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2021 à 11:19:44

      Je vois les déclarations de fonctions précédent chaque définition. Ce qui me laisse supposer que tu as tout mis dans le fichier entête fonctionPendu.h

      Or ce n'est pas comme cela qu'on doit procéder. Le fichier entête ne doit comporter que les déclarations de fonction et les définitions doivent être dans un fichier source (fonction.c par exemple) compilé à part.

      Ligne 74 de ton fichier fonction tu retournes une valeur or ta fonction est censé retourner void.

      Je n'ai pas regardé ton code en détail, mais il me semble qu'il peut être simplifié.

      • Partager sur Facebook
      • Partager sur Twitter
        9 juin 2021 à 1:26:04

        D'habitude, on suggère d'écrire des fonctions.
        Dans ce cas-ci, pour la fonction coup(), j'aurais écrit le code sur place plutôt que dans une fonction.
        Surtout que tu ne l'appelles qu'une fois et qu'elle est assez simple malgré tout.
        On ne m'aimeras pas pour celle-là:
        for (i=0; i < tailleTableau;i++) if (lettreChoisie == motSecret[i]) motCache[i]=lettreChoisie;
        • Partager sur Facebook
        • Partager sur Twitter

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

          9 juin 2021 à 14:09:47

          Salut,

          Peut-être qu'un mot de 1000 lettres est assez rare sauf si tu comptes y introduire du vocabulaire extra-terrestre. 50 serait déjà bien gras...

          srand() ne devrait être appelée qu'une fois, en général à l'initialisation du programme en début de main().

          • Partager sur Facebook
          • Partager sur Twitter

          Bonhomme !! | Jeu de plateforme : Prototype.

          TP Pendu cours 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