Pointeurs et tableaux de structures

Fermé
khalid_tounoussi Messages postés 1 Date d'inscription mardi 5 décembre 2017 Statut Membre Dernière intervention 5 décembre 2017 - Modifié le 5 déc. 2017 à 23:49
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 6 déc. 2017 à 08:05
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
6 déc. 2017 à 08:05
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