Etudiant sous forme Module
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Etudiant sous forme Module



  1. #1
    spiderhack

    Etudiant sous forme Module


    ------

    Slt les amis enfaîte j'ai écrit un petit programme qui permet de gerer un etudiant et je l'ai fait sous forme module mais le probleme qui se pose
    c'est que quand je le compile il m'affiche cette erreur undefined reference to `SaisirEtudiant'
    Et j'ai tout verifier mai je ne trouve pas d'erreur. Voici mon code source:
    j'ai declarer un fichier c (etudiant.c) qui contient les fonctions, le main() et un header (BiblioEtu.h) qui contient les prototypes.
    main.c
    Code:
    #include<stdio.h>
    #include "BiblioEtu.h"
    main(void){
       ETUDIANT etu;
    
       etu = SaisirEtudiant();
       AfficherEtudiant(etu);
    
       return 0;
    }
    BiblioEtu.h
    Code:
    #define N 10
    typedef struct {
            int  jour;
            char mois[10];
            int  annee;
    } DATE;
    typedef struct {
            char libelle[30];
            float  points;
    } NOTE;
    typedef struct {
               char  nom[25];
               char  prenom[50];
               DATE  date_naissance;
               char  classe[3];
               char  groupe;
               int   nbnotes;
               NOTE  tabNote[N];
            } ETUDIANT;
    
    DATE SaisirDate(void);
    void AfficherDate(DATE);
    ETUDIANT SaisirEtudiant(void);
    void AfficherEtudiant(ETUDIANT);
    void RemplirTab(NOTE t[], int taille);
    void AfficherTab(NOTE t[], int taille);
    etudiant.c
    Code:
    #define N 10
    typedef struct {
            int  jour;
            char mois[10];
            int  annee;
    } DATE;
    typedef struct {
            char libelle[30];
            float  points;
    } NOTE;
    typedef struct {
               char  nom[25];
               char  prenom[50];
               DATE  date_naissance;
               char  classe[3];
               char  groupe;
               int   nbnotes;
               NOTE  tabNote[N];
            } ETUDIANT;
    
    DATE SaisirDate(void);
    void AfficherDate(DATE);
    ETUDIANT SaisirEtudiant(void);
    void AfficherEtudiant(ETUDIANT);
    void RemplirTab(NOTE t[], int taille);
    void AfficherTab(NOTE t[], int taille);

    -----

  2. #2
    Jack
    Modérateur

    Re : Etudiant sous forme Module

    j'ai declarer un fichier c (etudiant.c) qui contient les fonctions
    Non, ce fichier contient les prototypes des fonctions, déjà déclarées par ailleurs dans BiblioEtu.h.
    En fait je ne vois pas la différence entre BiblioEtud.h et etudiant.c

  3. #3
    Dlzlogic

    Re : Etudiant sous forme Module

    Bonjour,
    Je vous conseille de reprendre tout à la base.
    le prototype de main est
    int main();
    Il peut comporter des paramètres mais pas void.
    Vous faites
    #define N 10
    Ce n'est pas une erreur, par contre, c'est une erreur de le faire 2 fois. D'ailleurs, pourquoi faites-vous cela ?
    autre erreur (mais pas forcément faute) déclaration de structure.
    le mot clé "typedef" veut dire que vous déclarez un nouveau type, de type struct qui aura tel nom, mais vous ne lui en donnez pas, puisque vous déclarez une structure anonyme.

    Un conseil : écrivez un programme très court, avec un main et une seule fonction et une seule structure.
    Par exemple, un étudiant a un nom et un age. Le programme doit le lire puis l'imprimer. Et c'est tout pour l'instant.

  4. #4
    Bluedeep

    Re : Etudiant sous forme Module

    Citation Envoyé par Dlzlogic Voir le message
    Je vous conseille de reprendre tout à la base.
    le prototype de main est
    int main();
    Il peut comporter des paramètres mais pas void.
    Tu devrais reprendre la base de la syntaxe du C

    Tu découvrirais, par exemple, que les notations de definition de fonction x(void) et x() sont strictement équivalentes.
    En revanche, sur la déclaration d'une fonction, l'omission de void signifie que la fonction peut prendre a priori n'importe quel paramètre. (même si cette acceptation est considérée comme obsolete depuis C 2011).

    En standard MISRA C 2004 (restreignant la norme C 99) , le mot clef void est même obligatoire.

    Bref .....

  5. A voir en vidéo sur Futura
  6. #5
    Dlzlogic

    Re : Etudiant sous forme Module

    Bon, j'avoue mon ignorance de cette norme. Merci de me le rappeler.
    Je sais aussi que le type de valeur retournée n'est pas obligatoire, mais, quand la dernière instruction est return 0, il est tout de même préférable de mettre int main().
    Je viens de lire une doc, le type de retour de main est int par défaut, donc, c'est pas la peine de le mettre.
    En conclusion, cette ligne était parfaitement bonne.

  7. #6
    Chanur

    Re : Etudiant sous forme Module

    Citation Envoyé par Dlzlogic Voir le message
    le mot clé "typedef" veut dire que vous déclarez un nouveau type, de type struct qui aura tel nom, mais vous ne lui en donnez pas, puisque vous déclarez une structure anonyme.
    Non, on peut très bien faire un typedef d'une structure anonyme : le nom du type qu'on définit n'est pas le nom de la structure, c'est le nom donné à la fin, juste avant le point virgule.
    En l'occurrence, le premier typedef permet parfaitement d'utiliser la déclaration "DATE date_naissance;" donnée plus loin.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  8. #7
    Dlzlogic

    Re : Etudiant sous forme Module

    Bon, alors, je suis un peu perdu.
    Si j'écris
    Code:
    struct DATE
    {
      int jj;
      int mm;
      int la;  
    };
    Je déclare une structure qui s'appelle DATE.
    Puis
    Code:
    {
       ...
      DATE LaDate;
       ...
    }
    D'abord, j'ai déclaré une structure du nom DATE, mais je n'ai rien créé.
    Ensuite, je crée une variable de type structure et de nom LaDate.
    Bon ou pas ?

    Maintenant si j'écris
    Code:
    struct DATE
    {
      int jj;
      int mm;
      int la;  
    }LaDate, UneDate;
    Là j'ai crée deux variables en même temps que j'ai déclaré la structure.
    Donc LaDate et UneDate sont créés et sont du type DATE.

    Si le mot-clé typedef est absent, la déclaration de la structure n'est utilisable que localement. Mais il est vrai que
    : "il n'est généralement pas nécessaire d'utiliser à la fois un sélecteur et typedef, l'un ou l'autre suffit."

    Le mot_clé typefef indique pour l'ensemble du programme la création d'un nouveau type.

    Bon ou pas ?
    Dernière modification par JPL ; 12/04/2017 à 20h23.

  9. #8
    Jack
    Modérateur

    Re : Etudiant sous forme Module

    Je sais aussi que le type de valeur retournée n'est pas obligatoire, mais, quand la dernière instruction est return 0, il est tout de même préférable de mettre int main().
    Je viens de lire une doc, le type de retour de main est int par défaut, donc, c'est pas la peine de le mettre.
    Pourtant le prototype de la fonction main des normes pas trop anciennes définissent un int comme type de retour.

  10. #9
    Jack
    Modérateur

    Re : Etudiant sous forme Module

    Concernant le 1er message, je pense qu'il s'agit d'une erreur de "copier/coller" qui explique le fait que les 2 fichiers soient identiques. On attend donc un retour pour connaitre le contenu de "etudiant.c" pour avancer un peu.

  11. #10
    Chanur

    Re : Etudiant sous forme Module

    Citation Envoyé par Dlzlogic Voir le message
    Bon, alors, je suis un peu perdu.
    Si j'écris
    Code:
    struct DATE
    {
      int jj;
      int mm;
      int la;  
    };
    Je déclare une structure qui s'appelle DATE.
    Puis
    Code:
    {
       ...
      DATE LaDate;
       ...
    }
    D'abord, j'ai déclaré une structure du nom DATE, mais je n'ai rien créé.
    Ensuite, je crée une variable de type structure et de nom LaDate.
    Bon ou pas ?
    Non, pas bon.
    La déclaration qui suit devrait être :
    Code:
    struct DATE LaDate;
    Ou alors, il fallait un typedef.

    Citation Envoyé par Dlzlogic Voir le message
    Maintenant si j'écris
    Code:
    struct DATE
    {
      int jj;
      int mm;
      int la;  
    }LaDate, UneDate;
    Là j'ai crée deux variables en même temps que j'ai déclaré la structure.
    Donc LaDate et UneDate sont créés et sont du type DATE.
    Oui. Ou plus exactement du type "struct DATE". Le type DATE tout seul n'est pas défini.

    Citation Envoyé par Dlzlogic Voir le message
    Si le mot-clé typedef est absent, la déclaration de la structure n'est utilisable que localement. Mais il est vrai que
    : "il n'est généralement pas nécessaire d'utiliser à la fois un sélecteur et typedef, l'un ou l'autre suffit."

    Le mot_clé typefef indique pour l'ensemble du programme la création d'un nouveau type.

    Bon ou pas ?
    Non, le mot typedef est une simplification de l'écriture, c'est tout. La déclaration :
    Code:
    struct DATE
       {
       ...
       };
    peut très bien être en dehors de toute fonction auquel cas on peut l'utiliser aussi bien pour des variables locales que globales.

    En fait, à part le cas où un des champs d'une structure est un pointeur vers la structure elle-même (une liste chaînée, par exemple), et elle ne peut pas être anonyme, c'est juste une question d'habitude et d'esthétique. Ça revient au même.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  12. #11
    gasol1

    Re : Etudiant sous forme Module

    ce fichier contient les prototypes des fonctions, déjà déclarées par ailleurs dans BiblioEtu.h.

  13. #12
    Jack
    Modérateur

    Re : Etudiant sous forme Module

    pas de signe de vie de spiderhack depuis 2 semaines, ça fait plaisir d'aider ...

Discussions similaires

  1. Exprimer des sous-espaces vectoriels de R^4 sous la forme Vect(v1,...,v2)
    Par thibault64 dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 11/02/2016, 20h15
  2. complexe, forme algébrique, arg et module
    Par invite1bf294f6 dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 11/10/2009, 19h05
  3. Déterminer la forme algébrique d'un nombre complexe écrit sous forme trigonométrique
    Par invite8412c11b dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 13/01/2009, 21h53
  4. Fe3+ sous quelle forme ?
    Par petitours dans le forum Chimie
    Réponses: 9
    Dernier message: 17/05/2006, 19h31