Utilisation de fichier.h

Résolu/Fermé
eugenieraza - Modifié par Judge_DT le 17/06/2015 à 13:47
 eugenieraza - 21 juin 2015 à 20:22
Bonjour,
Quand je crée un fichier.h et que j'inclue un include "fichier.h"
Et que j'essaie de compiler mon fichier.c, c'est toujours le fichier .h que le compilateur essaie de compiler! Quelqu'un peut me dire comment éviter ça?
voici un exemple de mon fichier
personne .h ,

#ifndef DEF_PERSONNE
#define DEF_PERSONNE
#endif

typedef struct Personne Personne 

struct_Personne
{
char nom[ 100];
char prenom[100];
char adresse[1000];
int age;
int garcon; //Booleen :1 = garcon, 0 = fille ;

} ;

et mon fichier qui l'utilise : personne.c (je ne peux pas compiler pour voir s'il n'y a pas d'erreur dans la façon de le coder. Si vous voyez des erreurs vous pouvez me les signaler aussi svp)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <string.h>

#include "personne.h"

int main (int argc, char *argv[])
{
 Personne joueur1 , joueur2;
 int mode = 1;
 //choisir mode 1 joueur ou 2 joueurs

 printf(" ****1 joueur ****\n");
 printf(" ****2 joueurs ****\n");
 printf(" choisissez un mode : 1 mode 1 joueur et 0 mode 2 joueurs \n");
 scanf ("%d", &mode);
 switch(mode)
  {case 1 :
   printf("vous avez choisi mode 1 joueur\n");
  break;
  case 2 :
  printf("vous avez choisi mode 2 joueurs\n");
  break;

  }

   if (mode == 1)
   {
   printf("joueur 1\n\n");
   printf("Quel est votre nom? \n");
   scanf("%s",joueur1.nom );
   printf("\n\n");

   printf("Quel est votre prenom? \n");
   scanf("%s",joueur1.prenom );
   printf("\n\n");

   printf("Bienvenue %s %s", joueur1.prenom, joueur1.nom);
   return 0;

   }
  else if (mode==0)
  {
  printf("vous avez choisi mode 2 joueurs \n");

  printf("joueur 1\n\n");

  printf("Quel est votre nom? \n");
  scanf("%s",joueur1.nom );
  printf("\n\n");

  printf("Quel est votre prenom? \n");
  scanf("%s",joueur1.prenom );
  printf("\n\n");

  printf("Bienvenue %s %s", joueur1.prenom, joueur1.nom);


  printf("joueur 2\n\n");

  printf("Quel est votre nom? \n");
  scanf("%s",joueur2.nom );
  printf("\n\n");

  printf("Quel est votre prenom? \n");
  scanf("%s",joueur2.prenom );
  printf("\n\n");

  printf("Bienvenue %s %s", joueur2.prenom, joueur1.nom);
  }

 }

merci d'avance


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.

1 réponse

Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 725
Modifié par Sugel le 17/06/2015 à 18:32
Déjà, tu n'a pas l'air d'avoir compris l'intérêt des instructions de préprocesseur au début du .h:
#ifndef DEF_PERSONNE // si la variable de préproc DEF_PERSONNE n'est pas définie, executer ce qui suit, sinon ne rien faire
#define DEF_PERSONNE // définir DEF_PERSONNE
//ton code ici
#endif // fin de la condition

Ce bout de code permet en fait d'éviter que le fichier soit inclus deux fois. Si cela arrive, alors la variable DEF_PERSONNE sera déjà définie, et rien ne sera inclus.
Malgré cela, cela aurait dû quand même marcher.

Autre petite erreur:
switch(mode)
{
  case 1 :
    printf("vous avez choisi mode 1 joueur\n");
    break;
  case 2 : // ici, on devrait tester si la variable est égale à zéro, et non pas deux
    printf("vous avez choisi mode 2 joueurs\n");
    break;
  // rajoute un message à afficher sur l'utilisateur n'entre ni un, ni deux
  default:
    printf("Vous n'avez entré ni un, ni deux !\n");
    return 0;
    break;
}


Quel compilateur utilise-tu ?

------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
0
eugenieraza
17 juin 2015 à 23:42
Bonsoir , j'utilise CodeBlocks .. Merci pour ta réponse. Ce n'est pas que je n'ai pas compris mais ce n'est pas facile à gérer quand on essaie de faire par petit bout l'exercice plus long
0
Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 725
18 juin 2015 à 17:04
Si tu as téléchargé Codeblocks seul sans mingw, le compilateur, il est normal que rien ne se produise:
codeblocks est un outil qui te permet d'orchestrer ton travail de développeur:
il te fournit un éditeur texte adapté, un débuggeur et peut lancer la compilation.

L'étape de compilation va transformer ton code (du texte) en langage machine, un autre code que la machine saura interpréter. Code blocks n'en est pas capable, et délègue la tâche à un autre programme, configurable.

Si ce dossier n'existe pas:
"C:\Program Files (x86)\CodeBlocks\MinGW\"

alors désinstalle ta version de codeblocks et installe celle-ci, qui comprends mingw, un compilateur:
https://sourceforge.net/projects/codeblocks/files/Binaries/13.12/Windows/codeblocks-13.12mingw-setup.exe/download

sinon, c'est manifestement autre chose.
0
eugenieraza > Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017
18 juin 2015 à 18:11
Logiquement j'ai installé le codeBlocks avec mingw. Comme je n'y connais absolument rien j'ai suivi la procédure décrite dans le cours. Mais je vais désinstaller ça ne coûte rien. Merci de ton aide
0
Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 725
18 juin 2015 à 21:56
tu ne serai pas le premier à installer la mauvaise version par erreur:
il me semble même m'être moi-même déjà trompé sur ce point
0
eugenieraza > Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017
20 juin 2015 à 10:33
Merci @Sugel, code::Blocks fonctionne maintenant (je refais mon programme parce que j'ai tout supprimé du coup)..
0