Variables structurées et passage de paramètres
Si l'on désire afficher les champs d'une variable de type structure « etudiant » à l'aide d'une fonction, il suffit de déclarer :
void afficher_etudiant( struct etudiant un_etu)
{
printf("\n nom : %s ", un_etu.nom);
printf("\n prenom : %s ",un_etu.prenom);
printf("\n moyenne : %f ",un_etu.moyenne);
}
Et ensuite si on utilise :
afficher_etudiant(a); // la variable est supposée contenir ici "paul" "sylve" et 19.0
Nous afficherons :
nom : sylve
prenom : paul
moyenne : 19.0
Comme nous l'avons vu dans le chapitre précédent sur les fonctions, la variable "a" est recopiée dans le paramètre formel "un_etu".
Par contre, si l'on veut modifier le contenu d'une variable structurée dans le corps de la fonction, il faut transmettre un pointeur comme expliqué dans le chapitre 7.
void saisie_etudiant( struct etudiant * un_pt_sur_etu)
{
printf("\n nom : ");
scanf("%s ", un_pt_sur_etu->nom);
printf("\n prenom : ");
scanf("%s ",un_pt_sur_etu->prenom);
printf("\n moyenne : ");
scanf("%f ",&(un_pt_sur_etu->moyenne));
}
Nous appellerons la fonction de la manière suivante :
saisie_etudiant (&e) ;
Ou encore :
saisie_etudiant (pt_e) ;
Une autre solution est possible pour la saisie :
// la fonction saisie_II retourne une valeur de type « struct etudiant » et n'a pas de paramètre. struct etudiant saisie_II (void)
{
struct etudiant etu ; //déclaration de la variable locale « etu »
printf("\n nom : ");
scanf("%s ", etu.nom);
printf("\n prenom : ");
scanf("%s ", etu.prenom);
printf("\n moyenne : ");
scanf("%f ",&( etu.moyenne));
return etu ;
}
Dans ce cas, le contenu de la variable locale « etu » de la fonction « saisie_II » sera retournée par la fonction.
Puisque l'on peut affecter une variable structurée à une autre de même nature, l'usage en sera :
e= saisie_II () ;
La fonction retourne une valeur qui correspond à une variable structurée, et cette valeur est affectée à la variable structurée « e ».