Pointeurs et tableaux de structures

khalid_tounoussi Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   -
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 ?



#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))
    }
}


EDIT : correction des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45

1 réponse

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,

Il faut un parenthèse avec l'étoile dans la fonction affiche ou l'ôter ou utiliser la notation tableau, on peut écrire
printf("[nom]:\t%s\n", (*(ptt+i)).nom);
printf("[nom]:\t%s\n", (ptt+i)->nom);  // ou
printf("[nom]:\t%s\n", ptt[i].nom);    // ou
0