Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pendu

Vos avis sur mon code

Sujet résolu
    23 novembre 2007 à 21:49:50

    Bonjour !
    J'ai fait le TP de Matheo sur le Pendu, et j'ai l'impression que mon code est beaucoup plus simple que celui de la solution... Alors je sais bien qu'il y a souvent plusieurs solutions pour faire un programme, mais peut-être que j'ai fait des trucs ultra déconseillés :D alors je voulais juste savoir si j'ai fait des trucs immondes, ou si mon code est "propre" :D

    Voici mon code :
    main.c :
    1. /* Created by Anjuta version 1.2.4a */
    2. /*      This file will not be overwritten */
    3. #include <stdio.h>
    4. #include <stdlib.h>
    5. #include "fonctions.h"
    6. int main()
    7. {
    8.         printf("Bienvenu dans le pendu !\n\n\n\n");
    9.         char mot_secret[] = "CAROTTE";
    10.         Partie(mot_secret);
    11.         return (0);
    12. }


    fonctions.c :
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <ctype.h>
    4. #include <string.h>
    5. char Lire_caractere()
    6. {
    7.         char caractere = 0;
    8.         caractere = toupper(caractere);
    9.         caractere = getchar();
    10.         while(getchar() != '\n');
    11.         return caractere;
    12. }
    13. void Partie(char *mot_secret)
    14. {
    15.         char lettre = 0;
    16.         int fini = 0, coups_restants = 10, i, taille_mot = strlen(mot_secret);
    17.         char *deja_decouvert = NULL;
    18.         deja_decouvert = malloc(taille_mot);
    19.         if(deja_decouvert == NULL)
    20.         {
    21.                 exit(0);
    22.         }
    23.         for(i=0; i<taille_mot; i++)
    24.         {
    25.                 deja_decouvert[i] = '*';
    26.         }
    27.         deja_decouvert[taille_mot] = '\0';
    28.         while(!fini)
    29.         {
    30.                 printf("Il vous reste %d coups à jouer.\n", coups_restants);
    31.                 printf("Quel est le mot secret ? %s\n", deja_decouvert);
    32.                 printf("Proposez une lettre : ");
    33.                 lettre = Lire_caractere();
    34.                 printf("\n\n");
    35.                 for(i=0; i<taille_mot; i++)
    36.                 {
    37.                         if(mot_secret[i] == lettre)
    38.                         {
    39.                                 deja_decouvert[i] = lettre;
    40.                         }
    41.                 }
    42.                 if(strchr(mot_secret, lettre) == NULL)
    43.                 {
    44.                         coups_restants--;
    45.                 }
    46.                 if(coups_restants == 0)
    47.                 {
    48.                         printf("Désolé, vous avez perdu... Le mot secret était : %s", mot_secret);
    49.                         fini = 1;
    50.                 }
    51.                 if(strcmp(mot_secret, deja_decouvert) == 0)
    52.                 {
    53.                         printf("Bravo, vous avez gagné ! Le mot secret était bien : %s", mot_secret);
    54.                         fini = 1;
    55.                 }
    56.         }
    57.         free(deja_decouvert);
    58. }



    fonctions.h :
    1. #ifndef fonctions
    2. #define fonctions
    3. char Lire_caractere();
    4. void Partie(char *mot_secret);
    5. #endif


    Merci pour tous vos futurs commentaires :D

    PS : J'ai pas encore fait que ça prend un mot au hasard, mais je pense savoir faire ;)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 novembre 2007 à 22:14:36

      In file included from main.c:7:
      fonctions.h:4: attention : function declaration isn"t a prototype
      main.c:10: attention : function declaration isn"t a prototype
      fonctions.c:7: attention : function declaration isn"t a prototype
      fonctions.c:18: attention : no previous prototype for «Partie"
      fonctions.c: In function «Partie":
      fonctions.c:22: attention : passing argument 1 of «malloc" as unsigned due to prototype
      fonctions.c: In function «Lire_caractere":
      fonctions.c:9: attention : ne sera jamais exécuté
      fonctions.c: In function «Partie":
      fonctions.c:46: attention : ne sera jamais exécuté
      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2007 à 22:34:38

        C'est bizarre, moi il m'envoie aucune erreur :S
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          23 novembre 2007 à 22:46:42

          C'est parce qu'il est mal réglé;
          je propose :
          1. /* Created by Anjuta version 1.2.4a */
          2. /*      This file will not be overwritten */
          3. #include <stdio.h>
          4. #include <stdlib.h>
          5. #include "fonctions.h"
          6. int main (void)
          7. {
          8.    puts ("Bienvenu dans le pendu !\n\n\n");
          9.    char mot_secret[] = "CAROTTE";
          10.    Partie (mot_secret);
          11.    return 0;
          12. }


          1. #ifndef FONCTIONS_H
          2. #define FONCTIONS_H
          3. #include <stdio.h>
          4. #include <stdlib.h>
          5. #include <ctype.h>
          6. #include <string.h>
          7. extern void Partie (char *mot_secret);
          8. #endif /* FONCTIONS_H */


          1. #include "fonctions.h"
          2. static char Lire_caractere (void);
          3. static char Lire_caractere (void)
          4. {
          5.    char caractere = toupper (getchar ());
          6.    while (getchar () != '\n');
          7.    return caractere;
          8. }
          9. void Partie (char *mot_secret)
          10. {
          11.    size_t taille_mot = strlen (mot_secret);
          12.    char *deja_decouvert = malloc (taille_mot + 1);
          13.    if (deja_decouvert == NULL)
          14.    {
          15.       perror ("malloc");
          16.    }
          17.    else
          18.    {
          19.       int fini = 0;
          20.       int coups_restants = 10;
          21.       size_t i;
          22.       for (i = 0; i < taille_mot; i++)
          23.       {
          24.          deja_decouvert[i] = '*';
          25.       }
          26.       deja_decouvert[taille_mot] = '\0';
          27.       while (!fini)
          28.       {
          29.          char lettre = 0;
          30.          printf ("Il vous reste %d coups à jouer.\n"
          31.                  "Quel est le mot secret ? %s\n"
          32.                  "Proposez une lettre : ", coups_restants, deja_decouvert);
          33.          lettre = Lire_caractere ();
          34.          puts ("\n");
          35.          for (i = 0; i < taille_mot; i++)
          36.          {
          37.             if (mot_secret[i] == lettre)
          38.             {
          39.                deja_decouvert[i] = lettre;
          40.             }
          41.          }
          42.          if (strchr (mot_secret, lettre) == NULL)
          43.          {
          44.             if (--coups_restants == 0)
          45.             {
          46.                printf
          47.                   ("Désolé, vous avez perdu... Le mot secret était : %s\n",
          48.                    mot_secret);
          49.                fini = 1;
          50.             }
          51.          }
          52.          else if (strcmp (mot_secret, deja_decouvert) == 0)
          53.          {
          54.             printf
          55.                ("Bravo, vous avez gagné ! Le mot secret était bien : %s\n",
          56.                 mot_secret);
          57.             fini = 1;
          58.          }
          59.       }
          60.       free (deja_decouvert), deja_decouvert = NULL;
          61.    }
          62. }

          Cordialement.
          • Partager sur Facebook
          • Partager sur Twitter

          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