Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment réaliser mon .h et mon .c ?

Problème pour faire un .h et un .c

    26 décembre 2006 à 12:47:54

    Bonjour

    Je suis a l'EFREI, et j'ai un projet a réaliser en programmation C. J'ai un pbm en programmation. Voici tout d'abord le code et après il y a la question :

    Citation : Bigdelir


    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include "conio.h"

    int pot2;
    int pot1;
    int joueur1 [15];
    int tour, tours_jeu, billes;

    void affichage()
    {
    clrscr ();
    printf (" 6 5 4 3 2 1\n");
    printf (" %d %d %d %d %d %d Pot du joueur 2 => %d\n",joueur1[12],joueur1[11],joueur1[10],joueur1[9],joueur1[8],joueur1[7],pot2 );
    printf ("------------\n");
    printf (" %d %d %d %d %d %d Pot du joueur 1 => %d\n",joueur1[1],joueur1[2],joueur1[3],joueur1[4],joueur1[5],joueur1[6] ,pot1 );
    printf (" 1 2 3 4 5 6\n\n\n");
    printf ("C'est le tour du joueur %d \n\n",tour);
    printf ("Nombre de tours joues : %d \n",tours_jeu);
    printf ("Nombre de billes restantes en jeu : %d \n\n",billes);
    printf ("l : liste des coups valides ");
    printf ("c : cas de fin de partie ");
    printf ("a : aide\n\n\n");
    }



    int main ()
    {
    // Tout le programme //
    }



    Bon alors voila, au début on avait défini la fonction affichage dans le fichier main.c

    Maintenant j'aimerai transferer cette fonction dans un fichier .h (et .c)

    Pourriez vous me donner le code du fichier.h et du fichier.c svp ou l'on présente la fonction affichage et ou on la définit ?

    Je pense connaitre a peu près ce qu'il faut mettre pour ce qui est de la commande void affichage() mais mon problème est que je ne sais pas quel est le code minimum du fichier .h et .c que je veux réaliser car mon prof explique très mal...

    Je vous remercie de votre aide par avance

    Big.
    • Partager sur Facebook
    • Partager sur Twitter
      26 décembre 2006 à 13:51:26

      #ifndef _AFFICHE_H
      #define _AFFICHE_H
      void affichage();
      #endif




      #include <stdio.h>
      #include <conio.h>
      #include <stdlib.h>

      #include "affichage.h"

      void affichage()
      {
      clrscr ();
      printf (" 6 5 4 3 2 1\n");
      printf (" %d %d %d %d %d %d Pot du joueur 2 => %d\n",joueur1[12],joueur1[11],joueur1[10],joueur1[9],joueur1[8],joueur1[7],pot2 );
      printf ("------------\n");
      printf (" %d %d %d %d %d %d Pot du joueur 1 => %d\n",joueur1[1],joueur1[2],joueur1[3],joueur1[4],joueur1[5],joueur1[6] ,pot1 );
      printf (" 1 2 3 4 5 6\n\n\n");
      printf ("C'est le tour du joueur %d \n\n",tour);
      printf ("Nombre de tours joues : %d \n",tours_jeu);
      printf ("Nombre de billes restantes en jeu : %d \n\n",billes);
      printf ("l : liste des coups valides ");
      printf ("c : cas de fin de partie ");
      printf ("a : aide\n\n\n");
      }
      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2006 à 14:24:37

        En gros, jamais de code dans le .h, juste les déclarations de tes fonctions. Les définitions se font dans le fichier .c correspondant... et pour utiliser la fonction dans ton fichier .c principal, tu inclus le fichier .h ... et si on met les ifndef, define et endif, c'est pour éviter les multiples inclusions d'un même fichier .h ! :)

        A noter que si tu fais un include ainsi :

        #include <blabla.h>

        Le compilo ira chercher le fichier .h dans les dossiers "include" de ton IDE tandis qu'en tapant :

        #include "blabla.h"

        Le fichier .h doit se trouver dans le même dossier que les fichiers .c ... tu te doutes que c'est nettement mieux ainsi puisque ca te permet non seulement de réunir tous les fichiers nécessaires à la compilation de ton programme dans un même dossier mais aussi et surtout de ne pas mélanger tes propres fichiers .h à ceux de ton implémentation.

        L'exemple donné par Th3*M@@D illustre parfaitement ce que tu dois faire.

        Bonne merde pour ton projet ! :)
        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2006 à 14:26:42

          Citation : bigdelir


          Je pense connaitre a peu près ce qu'il faut mettre pour ce qui est de la commande void affichage() mais mon problème est que je ne sais pas quel est le code minimum du fichier .h et .c que je veux réaliser car mon prof explique très mal...

          Je vous remercie de votre aide par avance

          Big.


          C'est pas que ton prof explique très mal, c'est que si c'est le même que le mien (et il y a des chances ^^), il explique parfois des choses fausses, et à ce sujet, ce qu'il avait dit était faux ;)

          Donc comme te l'a montré Th3*M@@D, tu crées un premier fichier affichage.h dans lequel il y a le premier code de Th3*M@@D. Tu y écris seulement les prototypes des fonctions que tu as créées, c'est-à-dire leur type, leur nom, leurs arguments et un point-virgule à la fin qu'il ne faut pas oublier ;)
          Tu peux avoir plusieurs fonctions dans un même .h, ca ne pose pas de problème.

          Tu crées ensuite un deuxième avec le deuxième code de Th3*M@@D, qui sera ton affichage.c.

          Ensuite, dans ton fichier qui contient le main, tu ajouteras simplement la ligne
          #include "affichage.h"

          avant le début de ton main ;)

          Bon courage ;)

          PS: n'oublie pas que pour la présoutenance, il faut montrer que tu sais utiliser la bibliothèque conio.h, donc tant qu'à faire, met un peu de couleur dans ton affichage et tu pourras réutiliser cette fonction pour la présoutenance ;) (cf. annexe du sujet :p)
          • Partager sur Facebook
          • Partager sur Twitter
            26 décembre 2006 à 15:00:35

            re !

            Bon bah je pense qu'on a le même toupi ^^ Qui est tu ? dans quel groupe es tu ? Je suis dans le groupe B ;)

            Je vous remercie de vos réponses, je n'ai pas encore testé, je ferai un edit dans 5 minutes des que j'aurai testé le code. Et j'irai voir ce que votre cote a de différent de celui que j'avais testé.

            Merci pour ces réponses précises.

            Big.

            EDIT: Bon j'ai testé et... ca foire. Même problème qu'avant. Alors je vous montre Je vais mettre les captures d'écran afin que vous ayez un aperçu.

            Alors, on a une première version qui marche tout a fait, ou la definition de affichage () est faite au tout début du main.c comme montré sur le lien de l'image ci dessus (j'ai pas mis l'affichage sinon ca allait etre horrible a lire. J'ai rogné les bords donc le code est coupé mais vous avez l'idée :

            Tout dans le main.c

            Bon maintenant je voulais mettre l'affichage dans un .h séparé. J'ai donc fait 2 fichier, un .h et un .c , en mettant dans chacun les codes respectifs que vous m'avez marqué.Mon projet, sous devc++, est organisé ainsi :

            Image utilisateur

            Dans le fichier affichage.h, j'ai mis le code donné précédemment par Th3*M@@D. Dans le fichier affichage.c, j'en ai fait de meme, j'ai mis le code donné par Th3*M@@D, auquel j'ai rajouté les définitions des variables, sinon devc++ ne compilait pas le pgrmme. Les fichiers conio n'interviennent pas. Et voici le visuel du début du code de mon main.c :

            Image utilisateur

            Et lorsque j'ai fait tout cela, a la compilation, ca marche, et des que j'execute le jeu, et que j'arrive sur le plateau de jeu, j'ai cet affichage:
            Image utilisateur

            Alors qu'avec la version sans .h, tout marche, et j'obtiens cela:

            Image utilisateur

            J'ai pourtant compris ce que vous m'avez dit, il me semble. Et apparement mon code que j'avais fait pour mon .h .c était bon avant. Mais y'a un bug a l'affichage que je ne comprend pas...

            Que faire ?

            Toupi, pour la couleur je n'ai pas compris comment utiliser la commande. Comment lui dire de mettre telle partie de telle couleur, et telle autre de telle couleur. Merci de ton aide

            Merci d'avance

            Bigdelir
            • Partager sur Facebook
            • Partager sur Twitter
              26 décembre 2006 à 15:49:41

              En fait, je viens de penser à quelquechose: ta fonction affichage est de type void, c'est normal, elle ne renvoie rien. Par contre, tu lui fais afficher certaines variables, comme le tour de jeu en cours, etc.
              Pour que ta fonction puisse les afficher, il faut que tu lui envoies en paramètre le tour de jeu. Idem pour le nombre de billes restantes, le contenu du tableau qui te sert de plateau de jeu, etc.
              C'est ce qui explique certainement que tu n'aies pas d'erreur de compilation mais une erreur à l'exécution ;)

              Tu peux aller voir le cours de Mateo sur les fonctions pour mieux comprendre: Les fonctions

              Essaie de faire passer les variables dont tu as besoin en paramètres (n'oublie pas de changer le prototype de ta fonction dans ton .h une fois cela fait ;))

              Et je prévois ta question suivante: il va falloir envoyer en paramètre de ta fonction le tableau-plateau de jeu. Pour cela, il va te falloir passer par les pointeurs, pour envoyer le tableau entier. Et cela te servira aussi si tu veux faire d'autres fonctions pour ton programme. Un petit conseil: va voir ici, tu auras tous les polys des cours de C, ce sera toujours mieux que le cours donné par le prof :pCours C

              Pour les couleurs, va voir l'annexe du sujet, je l'ai pas sous les yeux, là, mais tout est expliqué il me semble ;)

              Et pour info, je suis dans le groupe D, donc on a bien le même professeur ;)

              • Partager sur Facebook
              • Partager sur Twitter
                26 décembre 2006 à 15:54:37

                Et m**** ! Moi qui voulait éviter les pointeurs pour un temps... J'ai lu les cours de Mateo il y a 2 jours... Bon bah je retourne les lire, je trouverai bien. Merci en tout cas, et si jamais qq'un a ce qu'il faut que je rentre, je suis ouvert :) Apres je comprendrai, mais pour la premiere fois c'est toujours un "poil" dur :D:p

                Merki

                Bigdelir

                EDIT :

                Je veux bien croire ce que tu me dis, car cela paraitrai tout a fait plausible, mais dans ce cas comment explique tu que cela marche sans les .h/.c et que ca marche pas quand je fais les .h/.c ? Car la fonction marche très bien quand je ne fais pas de .h/.c
                • Partager sur Facebook
                • Partager sur Twitter
                  26 décembre 2006 à 16:16:44

                  Citation : bigdelir

                  Je veux bien croire ce que tu me dis, car cela paraitrai tout a fait plausible, mais dans ce cas comment explique tu que cela marche sans les .h/.c et que ca marche pas quand je fais les .h/.c ? Car la fonction marche très bien quand je ne fais pas de .h/.c


                  Quand on ne met pas de prototypes, le C considère que les paramètres et le type retour sont de type int, ce qui peut provoquer un comportement qui semble correct sur ta machine.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !

                  Comment réaliser mon .h et mon .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