Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Pointeurs et tableaux de structures

  1. khalid tounoussi

    Date d'inscription
    décembre 2017
    Messages
    1

    Exclamation Pointeurs et tableaux de structures

    bonjour à tous , voilà je tombe dans une difficulté que je souhaite la fixer , voila mon programme , tout marche bien les structures , la fonction de saisie , sauf que la dernier fonction d'affichage "affiche" ne marche pas , ce que je cherche c'est pas de trouver autre solutions ou méthodes .. mais je cherche de faire l'affichage avec un pointeur ( la fonction affiche recevoir l'adresse du poiteur p qui est dans la fonction main ) apres la saisie de tous les infos , est ce que je peux afficher le contenu ? et comment ?
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct {
                int jours;
                int mois;
                int annees;
                }date;
    typedef struct{
        char nom[30];
        char prenom[20];
        int age;
        int poids ;
         date dt;  
                    }et;
    main(){
        void etudEst(et* ,int );
        void affiche(et* ,int );
        int i,n;
        et *p;
        printf("Entrez la taille N de votre tableau \n");
        scanf("%d",&n);
        p=(et*)malloc(n*sizeof(et));
        etudEst(p,n);
        affiche(p,n);
    }
    void etudEst(et* pt,int m){
             
        int i;
        for(i=0;i<m;i++){
                printf("[entrez votre nom]\n");
                scanf("%s",(pt+i)->nom);
                 
                printf("[entrez votre prnom]\n");
                scanf("%s",(pt+i)->prenom);
                 
                printf("[entrez votre age]\n");
                scanf("%d",&(pt+i)->age);
             
                printf("[entrez votre poids]\n");
                scanf("%d",&(pt+i)->poids);
             
                printf("[entrez votre date de naissance : jj/mm/yyyy ]\n ");
                scanf("%d",&(pt+i)->dt.jours);
                scanf("%d",&(pt+i)->dt.mois);
                scanf("%d",&(pt+i)->dt.annees);
            }
    }
    void affiche(et* ptt,int p){
        int i ;
        for(i=0;i<p;i++){
            printf("L element [%d]\n",i);
            printf("[nom]:\t%s\n",*(ptt+i)->nom);
            printf("[Prenom]:\t%s\n",*(ptt+i)->prenom);
            printf("[Age]:\t%d\n",(*(ptt+i))->age);
            printf("[Poids]:\t%d\n",(*(ptt+i)->poids));
            printf("[date]: \n [jours ] :  %d \t [mois ] :   %d \t [annees]  :  %d  \t  ",*(ptt+i)->dt.jours,*(ptt+i)->dt.mois,*(ptt+i)->dt.annees))
        }
    }

    -----

     


    • Publicité



  2. pm42

    Date d'inscription
    juillet 2015
    Messages
    4 178

    Re : Pointeurs et tableaux de structures

    J'ai regardé vite fait et tu ne penses pas que * et -> font 2 déréférencements du pointeur quand il n'en faudrait qu'un ?
     

  3. polo974

    Date d'inscription
    février 2007
    Messages
    8 409

    Re : Pointeurs et tableaux de structures

    et en plus, attention à la précédence... (bien faire attention à l'ordre ET à l'associativité )

    les parenthèses explicites sont disons de priorité 0... (voir plus bas)

    *(ptt+i)->dt.mois est interprété comme:

    *((ptt+i)->dt).mois)
    le * en dernier ! ! ! (mais, bon, ici, on s'en fout, il est en trop...


    (ptt+i)->dt.mois sera interprété comme: ((ptt+i)->dt).mois)
    donc
    (ptt+i) je somme ptt et i, c'est un pointeur sur une structure
    (... -> dt) je vais voir dans l'élément dt de la structure pointée ci-dessus
    (...).mois et je prends l'élément mois de la structure date

    bref, de toute façon, en cas de doute, hop un niveau de parenthèse (si on a un doute, le suivant qui lira le code en aura peut-être 2...).

    en passant, et juste pour le plaisir de lire:
    une date contient un jour au singulier et une année au singulier aussi...
    Code:
    typedef struct {
                 int jour;
                 int mois;
                 int annee;
                 }date;
    serait donc plus compréhensible... (au pluriel, on pense à une durée, pas à une date...)
    Le mieux est l'ennemi du bien, et c'est bien mieux comme ça...
     

  4. CM63

    Date d'inscription
    juin 2006
    Localisation
    Un peu au large de la faille de Limagne
    Âge
    64
    Messages
    3 262

    Re : Pointeurs et tableaux de structures

    C'est surtout &(pt+i)->dt qui n'est pas bon. Cela équivaudrait à faire (pt+i).dt , or (pt+i) est un pointeur et donc cela ne peut marcher. Je suppose que ce que tu veux faire c'est (*(pt+i)).dt, et pour cela il suffit de faire (pt+i)->dt . La fleche est là pour ça, c'est un raccourci qui permet d'éviter cette accumulation de parenthèses.
     


    • Publicité







Sur le même thème :


    301 Moved Permanently

    301 Moved Permanently


    nginx/1.2.1



 

Discussions similaires

  1. Structures de données et tableaux dynamique. "Triangle Rectangle"
    Par myoui dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 17/05/2016, 15h16
  2. Mécanique des structures / structures en nid d'abeille
    Par V_456 dans le forum TPE / TIPE et autres travaux
    Réponses: 3
    Dernier message: 12/10/2015, 08h12
  3. Quel est le rapport entre les pointeurs et les tableaux ?
    Par Bladejo95 dans le forum Programmation et langages, Algorithmique
    Réponses: 57
    Dernier message: 09/10/2012, 11h34
  4. ?les pointeurs & les structures()
    Par achernar dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 08/12/2009, 23h14
  5. C : Initialisation de structures/tableaux de structures
    Par Blub dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 12/08/2008, 11h57