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 :

scanf d'une structure imbriqée


Sujet :

C

  1. #1
    Membre confirmé
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Par défaut scanf d'une structure imbriqée
    Bonsoir,
    j'ai rencontré beaucoup des problèmes avec les structures
    je voudrai vous demander comment faire un appel d'une structure dans une autre pour
    comment appliqué scanf pour remplir un tableau de structure se type de programme
    merci a vous tous
    voila mon 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
    #include<stdio.h>
    #include<conio.h>
    #define const max;
    typedef struct horaire{ 
            int h;
            int mn;
            int s;
            }horaires;
     
    typedef  struct bus 
               { 
                 int num;
                 char nom;
                 char dep;
                 char arr;
                 struct horaires ; 
                 }BUS;
    main()
    { 
     
    int max=0;      
    int i,x;
    struct bus t[max];
    for(i=0;i<10;i++)
    { 
                     printf("donner le numéro de bus\n");
                     scanf("%d",&t[i].num);
                     printf("donner l'heure de départ\n");
                     scanf("%d",&t[i].horaires.h);
                     printf("donner minute de départ\n");
                     scanf("%d",t[i].horaires.mn);
                     printf("donner seconde de départ\n");
                     scanf("%d",t[i].horaires.s);
                     printf("l'heure d'arrivée\n");
                     scanf("%d",&t[i].horaires.h);
                     printf("minute d'arrivée\n");
                     scanf("%d",&t[i].horaires.mn);
                     printf("seconde d'arrivée\n");
                     scanf("%d",&t[i].horaires.s);
     
                     }
     
    {  
                     printf("donner le numero de bus\n");
                     scanf("%d",&x);
     
                     while(t[i].num != x)
    compilateur:devc++
    système: win vista

  2. #2
    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
    3
    4
    5
    6
    7
    8
    typedef  struct bus 
               { 
                 int num;
                 char nom;
                 char dep;
                 char arr;
                 struct horaires ; 
                 }BUS;
    struct horaires n'existe pas. Il existe un struct horaire et un type horaires. Tu peux donc avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef  struct bus 
               { 
    ...
                 struct horaire horaires ; 
                 }BUS;
    // ou
    typedef  struct bus 
               { 
    ...
                 horaires horaires ; // bien que ce ne soit pas très malin de donner
                                     // au champ le même nom que celui d'un type.
                 }BUS;

  3. #3
    Membre confirmé
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Par défaut scanf d'une structure imbriqée
    Merci beaucoup une bonne réponse et très claire,mais j'ai u tout petit problème avec la structure horaires est ce que l'enregistrement correcte avec cette lecture "c'est a dire l'horaire d'arrivée en h,mn,s écrase l'horaire de départ" ?
    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
    for(i=0;i<max;i++)
    {
    printf("donner le numéro de bus\n");
    scanf("%d",&t[i].num);
    printf("donner l'heure de départ\n");
    scanf("%d",&t[i].horaires.h);
    printf("donner minute de départ\n");
    scanf("%d",t[i].horaires.mn);
    printf("donner seconde de départ\n");
    scanf("%d",t[i].horaires.s);
    printf("l'heure d'arrivée\n");
    scanf("%d",&t[i].horaires.h);
    printf("minute d'arrivée\n");
    scanf("%d",&t[i].horaires.mn);
    printf("seconde d'arrivée\n");
    scanf("%d",&t[i].horaires.s);
    }

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oui, l'horaire d'arrivée écrase l'horaire de départ.
    Mais surtout, il y a des erreurs dans ce code: les champs mn et s sont passés par valeur à scanf(), alors que c'est leur adresse qui devrait être passée!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Par défaut
    vous voulez dire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    &t[i].horaires.&s//!!!!
    pardon j'ai pas arrivée a comprendre se que vous voulez dire merci si vous me clarifier par un code
    rn plus comment je peux corriger le problème de l'écrasement sans ajouté une autre structure ou l'utilisation des autres variables ou un deuxième tableau de type BUS ?"mon prof ma dit que tu as 3 variable tu peux l'utilises 1000 sans avoir ajoutez d'autre var "

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Non, seulement ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%d", &t[i].horaires.mn);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ta structure de données ne te permet de stocker qu'un seul horaire par bus, c'est comme ça.
    Tu dois utiliser une collection (liste chaînée, tableau, etc.) de structures horaire si tu veux avoir plusieurs horaires par bus.

    De plus, ta structure horaire(s) ne peut contenir qu'une seule heure, alors qu'il faudrait pouvoir y en mettre deux (ou bien, utiliser deux structures pour le même horaire).

    Voici la structure que je propose:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct hms
    {
    	int h;
    	int mn;
    	int s;
    };
     
    struct horaire
    {
    	struct hms depart;
    	struct hms arrivee;
    };
    Ensuite, pour un bus avec un seul horaire, ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct bus
    {
    	int num;
    	char nom;
    	char dep;
    	char arr;
    	struct horaire horaireUnique; 
    };
    Sinon, pour un bus pouvant avoir plusieurs horaires:
    Code C : 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
    struct tableauHoraires
    {
    	struct horaire *pHoraires;
    	size_t nbHoraires;
    	/*Pour faire plus performant, 
    	  on pourrait utiliser deux valeurs différentes pour:
    	  * la capacité du tableau
    	  * le nombre d'horaires dans le tableau,
    	  mais c'est plus compliqué, commençons par faire simple.*/
    };
     
    struct bus
    {
    	int num;
    	char nom;
    	char dep;
    	char arr;
    	struct tableauHoraires horaires;
    };
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Par défaut
    vraiment merci bien maintenant je peux taper mon code avec plus de logique et plus de confiance je vai taper mon code de nouveau

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/10/2008, 13h41
  2. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  3. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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