IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

bibliothéque avec structures


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut bibliothéque avec structures
    slt tt l monde.en fait je suis entrain de réaliser un programme qui consiste a organiser des livre livres d'un biblio.c a d qu'on fait ajouter un livre avec son auteur et son prix..
    mais jé rencontré quelq problemes lorsde la compilation


    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    int n;
    void remplir(struct bibl*   ,int );
    void afficher(struct bibl*  ,int );
    /*void rechercher(
    void afficherauteur(*/
     
     
     
    struct bibl
    {char titre[50];
    char auteur[50];
    int prix;
    };
     
    struct bibl* t[50];
    main()
    {
     
     
    printf("entrer le nombre de livres:");
    scanf("%d",&n);
    void remplir(bibl* t,int n);
    void afficher(bibl* t,int n);
    /*rechercher(struct bibl,n)
    afficherauteur(struct bibl,n)*/
    getch();
    }
     
    void remlpir(struct bibl* t[50],int n)
    {int i;
    for(i=0;i<n;i++)
          {
                    printf("entrer le titre du livre");
                    scanf("%s",&t[i].titre);
                    printf("enter le nom de l'auteur du livre");
                    scanf("%s",&t[i].auteur);
                    printf("entrer le prix du livre");
                    scanf("%d",&t[i].prix);
          }
    }
     
    void afficher(struct bibl* t[50],int n)
    { int i;
    for(i=0;i<n;i++)
          {
                    printf("t[i].titre");
          }
    }

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Ca serait pas mal que tu indiques les erreurs de compilation...
    Pourrais tu faire attention à l'ortho aussi?

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    l'erreur est dans cette ligne:
    scanf("%s",&t[i].titre);

    é le compilateur m'indique l'erreur suivante:

    37 C:\Users\Admin\Documents\bibliotheque.cpp `titre' has not been declared




    alors q titre est bien déclaré!!!

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Pourquoi tu déclares un tableau de pointeurs sur struct bibl? Et puis s'il te plait, pas de variables globales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include<stdio.h>
    #include<conio.h> /* Beurk!!! */
    #include<string.h>
    int n; /* Enlève moi-vite cette variable globale avant que je te colle une contravention! Place la dans ton main*/
    void remplir(struct bibl *, int);
    void afficher(struct bibl *, int);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void remplir(struct bibl* t[50],int n)
    {
        ...
    }
    Regarde ta déclaration plus haut et regarde ce que tu écris ici .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void remplir(struct bibl * t, int n)
    Sinon, si tu optes pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void remplir(struct bibl t[50])
    Tu n'as plus besoin de passer le nombre d'éléments du tableau, puisqu'elle est déjà connue.

    Corrige aussi ta fonction afficher.

    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s", t[i].titre);
    Y a trop d'erreur dans ta fonction principale que j'pourrais pas toutes les commenter, mais voici à peu près ce que l'on devrait avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main()
    {
        struct bibl t[50];
        int n;
     
        printf("entrer le nombre de livres : ");
        scanf("%d", &n);
     
        remplir(t, n);
        afficher(t, n);
     
        return 0;
    }

  5. #5
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    remlpir ou remplir, il faut choisir. Personnellement je choisis le mot qui veut dire quelquechose.

    Comme quoi l'orthographe aide à coder...

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Melem Voir le message
    Sinon, si tu optes pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void remlpir(struct bibl t[50])
    Tu n'as plus besoin de passer le nombre d'éléments du tableau, puisqu'elle est déjà connue.
    J'en suis beaucoup moins sûr que toi... En fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void remlpir(struct bibl t[50]);
    est strictement équivalent à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void remlpir(struct bibl t[]);
    qui est strictement équivalent à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void remlpir(struct bibl *t);
    Il n'est pas possible de récupérer la taille du tableau depuis l'intérieur de la fonction, d'où la nécessité de passer la taille de ce dernier en argument.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Ca alors. Je l'ai toujours su pour t[] et *t, en argument d'une fonction, mais pas même quand on spécifie la taille. C'est un peu bête quand même ...

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Voici ton code corrigé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define BIBLIO_MAX_LIVRES 50
     
    struct bibl
    {
        char titre[50];
        char auteur[50];
        int prix;
    };
     
    /* -tc- purge les caracteres restant dans le tampon du flux entrant fp */
    static void fpurge(FILE *fp)
    {
        if (fp != NULL)
        {
            int c;
     
            while ((c = fgetc(fp)) != '\n' && c != EOF)
            {
            }
        }
    }
     
    /* -tc- elimine le caractere de fin de ligne saisi par fgets() et fait le
       menage sur le flux entrant si necessaire */
    static void fclean(char *tampon, FILE *fp)
    {
        if (tampon != NULL && fp != NULL)
        {
            char *pc = strchr(tampon, '\n');
     
            if (pc != NULL)
            {
                *pc = 0;
            }
            else
            {
                fpurge(fp);
            }
        }
    }
     
    static void remplir(struct bibl *t, size_t n, size_t taille)
    {
        /* -tc- on commence par valider les arguments*/
        if (t != NULL)
        {
            size_t i;
            char tampon[16] = {0};
            char *pend = NULL;
     
            if (n > taille)
            {
                n = taille;
            }
     
            for (i = 0; i < n; i++)
            {
                /* -tc- Il est possible de factoriser encore un peu le code au
                   niveau des saisies securisees */
                printf("Entrer le titre du livre: ");
                fflush(stdout);
                if (fgets(t[i].titre, sizeof t[i].titre, stdin) != NULL)
                {
                    fclean(t[i].titre, stdin);
                }
     
                printf("Enter le nom de l'auteur du livre: ");
                fflush(stdout);
                if (fgets(t[i].auteur, sizeof t[i].auteur, stdin) != NULL)
                {
                    fclean(t[i].auteur, stdin);
                }
     
                do
                {
                    printf("Entrer le prix du livre: ");
                    fflush(stdout);
                    if (fgets(tampon, sizeof tampon, stdin) != NULL)
                    {
                        fclean(tampon, stdin);
                    }
                    t[i].prix = strtol(tampon, &pend, 0);
                }
                while (*pend != 0);
            }
        }
    }
     
    static void afficher(struct bibl * t, size_t n, size_t taille)
    {
        if (t != NULL && n < taille)
        {
            size_t i;
     
            if (n > taille)
            {
                n = taille;
            }
     
            for (i = 0; i < n; i++)
            {
                printf("%s\n", t[i].titre);
            }
        }
    }
     
     
    /* -tc- main() retourne un entier de type int, toujours! */
    int main(void)
    {
        struct bibl t[BIBLIO_MAX_LIVRES];
        int n;
        int rv; /* -tc- valeur retournee par scanf() */
     
        /* -tc- securisons un peu la saisie */
        do
        {
            printf("Entrer le nombre de livres: ");
            /* -tc- pour etre portable, il faut forcer l'affichage avec fflush() */
            fflush(stdout);
            rv = scanf("%d",&n);
            /* -tc- pour faire les choses proprement, on purge les caracteres qui
               se trouvent encore sur le flux d'entree standard */
            fpurge(stdin);
        }
        while (rv != 1 || n < 0);
     
        remplir(t, n, BIBLIO_MAX_LIVRES);
        afficher(t, n, BIBLIO_MAX_LIVRES);
     
        /* -tc- 0, EXIT_SUCCESS et EXIT_FAILURE sont les 3 valeurs portables
           que peut retourner main() */
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Melem Voir le message
    Ca alors. Je l'ai toujours su pour t[] et *t, en argument d'une fonction, mais pas même quand on spécifie la taille. C'est un peu bête quand même ...
    Pour avoir directement accès à la taille d'un tableau, tu peux l'encapsuler dans une structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
     
    #define NB_ELEMS(tableau) (sizeof (tableau) / sizeof *(tableau))
     
    struct Tableau {
        int data[10];
    };
     
    void afficher(struct Tableau const *t)
    {
        if (t != NULL)
        {
            size_t taille = NB_ELEMS(t->data);
            size_t i;
     
            for (i = 0; i < taille; i++)
            {
                printf("%d ", t->data[i]);
            }
            printf("\n");
        }
    }
     
    int main(void)
    {
        struct Tableau t = {
            {0,1,2,3,4,5,6,7,8,9}
        };
     
        afficher(&t);
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2007, 02h38
  2. [PHP-JS] Problème affichage avec structure if
    Par kitty2006 dans le forum Langage
    Réponses: 31
    Dernier message: 07/09/2006, 18h01
  3. Thread Synchronisation avec structure FIFO ??
    Par vincedom dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2006, 06h00
  4. C++ - Probleme avec structure et template
    Par vdumont dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2006, 15h32
  5. Réponses: 12
    Dernier message: 26/04/2004, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo