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 :

Probleme avec une structure


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut Probleme avec une structure
    Voila a vrai dire j'arrive pas a compiler et apparement j'ai un probleme avec ma structure quand je l'utilise dans mon prog principale

    Pouvez m'expliquer comment resoudre ce probleme

    C'est la premiere fois que j'utilise les structures et je suis debutant dans le C

    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
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    // declaration des librairies
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    // Définie les pointeurs de fichier
    FILE *fichier_demandeur;
    FILE *fichier_historique;
    
    // definie les numeros des entres de commande
    
    # define NUM_FICHIER_DEMANDEUR 1
    # define NUM_FICHIER_HISTORIQUE 2
    
    
    
    typedef struct
    {
            char prenom [50];
            char nom [50];
            char date_de_naissance [50];
            char adresse [50];
            char ville [50];
            char chomeur;
    
    } demandeur;
    
    int main( int argc, char *argv[])
    
    {
    
    
            // declaration des variables
    
            int erreur_commande=0;
            char choix;
            char ligne [50];
            char *tmp;
    
            // Debut des verification
    
            // Verification du bon nombre de mot en entree
    
            if ( argc < NUM_FICHIER_HISTORIQUE )
            {
                    erreur_commande++;
            }
    
            if ( argc > NUM_FICHIER_HISTORIQUE +1 )
            {
                    erreur_commande++;
            }
    
            // Ouverture des fichiers ssi pas d'erreur de commande
    
            if ( !erreur_commande )
    
            {
    
                    // Ouverture du fichier demandeur
    
                    fichier_demandeur = fopen ( argv[NUM_FICHIER_DEMANDEUR], "r");
    
                    if( fichier_demandeur == NULL )
                    {
                            erreur_commande++;
                    }
    
    
                    else
                    {
    
                            // stockage des données dans la structure
    
                            while (fgets(ligne,sizeof ligne, fichier_demandeur))
    // c'est la premiere fois que j'utilise une structure donc je ne sais pas si c'est la bonne facon de faire [/COLOR]
    
    
                            // copie de lidentifiant du fichier source dans demandeur.idenfiant
                            tmp = strtok(ligne,';');
                            strcpy(demandeur.identifiant,tmp);
    
                            //copie du nom dans demandeur.nom
                            tmp = strtok(NULL,';');
                            strcpy(demandeur.nom,tmp);
    
                            //copie du prenom dans demandeur.prenom
                            tmp = strtok(NULL,';');
                            strcpy(demandeur.prenom,tmp);
    
                            //copie de la date de naissance dans demandeur.date_de_naissance
                            tmp = strtok(NULL,';');
                            strcpy(demandeur.date_de_naissance,tmp);
    
                            //copie de l'addresse dans demandeur.adresse
                            tmp = strtok(NULL,';');
                            strcpy(demandeur.adresse,tmp);
    
                            //copie de la ville dans demandeur.ville
                            tmp = strtok(NULL,';');
                            strcpy(demandeur.ville,tmp);
    
    
                            //copie de du statut dans demandeur.chomeur
                            tmp = strtok(NULL,';');
                            strcpy(demandeur.chomeur,tmp);
    
                            //Ouverture du fichier historique
                            fichier_historique = fopen ( argv[NUM_FICHIER_HISTORIQUE], "r");
    
    
                            if( fichier_historique == NULL );
                            {
                                    erreur_commande++;
                            }
    
                            else
                            {
                                    printf("VIEW   : v ou V --> Consulter les informations\n");
                                    printf("UPDATE : u ou U --> Mettre ` jour les informations d'un demandeur\n");
                                    printf("DELETE : d ou D --> Supprimer un demandeur\n");
                                    printf("ADD    : a ou A --> Ajouter un demandeur\n");
                                    printf("SHOW   : s ou S --> Montrer la reprisentation de l'arbre binaire\n");
    
                                    printf("Commande:");
                                    choix=getchar();
    
                                    choix=tolower(choix);
    
                                    switch(choix)
                                    {
                                            case 'v' :
                                            case 'V' :
                                                            printf("cool-1\n");
                                                            break;
                                            case 'u' :
                                            case 'U' :
                                                            printf("cool-2\n");
                                                            break;
                                            case 'd' :
                                            case 'D' :
                                                            printf("cool-3\n");
                                                            break;
                                            case 'a' :
                                            case 'A' :
                                                            printf("cool-4\n");
                                                            break;
                                            case 's' :
                                            case 'S' :
                                                            printf("cool-5\n");
                                                            break;
                                            default :
                                                            printf("ERREUR Commande invalide\n");
                                                            break;
                                    }
                            }
                    }
    
            }
    
    }

  2. #2
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Bonjour,

    Normalement, et avant d'aller plus loin, vous ne devriez pas poster un tel code. Les messages du compilateur, même mal réglé, devraient vous permettre de bien nettoyer. Déjà, le second argument de strtok() est un const char*, et vous passez des trucs genre ';', c'est à dire un entier. Si votre compilateur ne vous dit rien à ce sujet, paramétrez-le.

    A+

    Pierre

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       tmp = strtok(ligne,';');
       strcpy(demandeur.identifiant,tmp);
    A corriger le char au lieu d'une chaîne de caractères dans strtok :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp = strtok(ligne,";");
    L'erreur dans l'utilisation des structures est liée au fait que demandeur est un type, pas un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct
    {
    ....
    } demandeur;
    Il faut créer un objet de ce type et accéder à ses champs par l'opérateur . (point)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main( int argc, char *argv[])
    {      
    ....
           demandeur x;
    .....
           strcpy(x.identifiant,tmp);

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par coco.cohen Voir le message
    Voila a vrai dire j'arrive pas a compiler et apparement j'ai un probleme avec ma structure quand je l'utilise dans mon prog principale

    Pouvez m'expliquer comment resoudre ce probleme

    C'est la premiere fois que j'utilise les structures et je suis debutant dans le C
    <...>
    T'as pas peur de poster ça...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:82: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:83: error: syntax error before "demandeur"
    main.c:86: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:87: error: syntax error before "demandeur"
    main.c:90: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:91: error: syntax error before "demandeur"
    main.c:94: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:95: error: syntax error before "demandeur"
    main.c:98: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:99: error: syntax error before "demandeur"
    main.c:102: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:103: error: syntax error before "demandeur"
    main.c:107: warning: passing arg 2 of `strtok' makes pointer from integer without a cast
    main.c:108: error: syntax error before "demandeur"
    main.c:114: warning: empty body in an if-statement
    main.c:119: error: syntax error before "else"
    main.c:130: warning: implicit declaration of function `tolower'
    main.c: At top level:
    main.c:163: error: syntax error before '}' token
    Process terminated with status 1 (0 minutes, 1 seconds)
    9 errors, 9 warnings
    Avant de parler de structures, il faudrait peut être apprendre à lire les docs des fonctions...

    http://man.developpez.com

Discussions similaires

  1. Probleme avec une structure sequentielle empilée
    Par kobalt02 dans le forum LabVIEW
    Réponses: 4
    Dernier message: 17/06/2009, 13h27
  2. Probleme avec une structure
    Par bouba69 dans le forum Débuter
    Réponses: 12
    Dernier message: 03/02/2008, 21h46
  3. probleme avec une structure.
    Par apesle dans le forum C
    Réponses: 5
    Dernier message: 24/12/2006, 15h18
  4. Probleme avec une structure
    Par Fred2209 dans le forum C++Builder
    Réponses: 15
    Dernier message: 22/11/2006, 22h47
  5. probleme avec une "structure en arbre"
    Par kamouminator dans le forum C
    Réponses: 1
    Dernier message: 07/11/2006, 22h21

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