Langage C

wafa_mef Messages postés 2 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 13 mars 2008 - 13 mars 2008 à 21:50
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 - 13 mars 2008 à 22:52
merci de me considerer un membre de ce club et j' ai le plaisir de participer avec vous .merci pour les codes sources envoyés.

j'ai écrit un programme en langage C mais à l'execution il y a 3
erreurs et je n'ai pas reussi à les determiner.merci de m'aider.


#include<stdio.h>

#include<stdlib.h>

struct date

{

    int jour;

    int mois;

    int annee;

};

typedef struct date DATE;

struct info

{

    int ce;//numero carte d'etudiant

    char nom[20];

    DATE naissance;

    float notes[5];//chaque etudiant psséde 5 notes

};

typedef struct info INFO;

struct etudiant

{

    INFO inf;

    float moyenne;

};

typedef struct etudiant ETUDIANT;

main()

{

    void nombre_etud(int *n);

    ETUDIANT*allocation(int n);

    void remplir(ETUDIANT *tab,int n);

    void affichage(ETUDIANT *tab,int n);

    void afficheinverse(ETUDIANT *tab,int n);

    void aff_noms(ETUDIANT *tab,int n);


    ETUDIANT *tab;int n;


    printf("saisir nombre d'étudiants  ");

    nombre_etud(&n);

    tab=allocation(n);

    remplir(tab,n);

    affichage(tab,n);

    free(tab);

    afficheinverse(tab,n);

    aff_noms(tab,n);

    return 0;

}

void nombre_etud(int *n)

{

    scanf("%i",n);

}

ETUDIANT*allocation(int n)

{

    ETUDIANT *tab;

    tab=(ETUDIANT*)malloc(n*sizeof(ETUDIANT));

    return tab;

}

void remplir(ETUDIANT *tab,int n)

{

    ETUDIANT *e;

    for(e=tab;e<tab+n;e++)

    {

        printf("saisir inf,moyenne\n");

        scanf("%i %c %i %i %i %f
%f",&e->inf.ce,&e->inf.nom,&e->inf.naissance.jour,&e->inf.naissance.mois,&e->inf.naissance.annee,&e->inf.notes,&e->moyenne);

    }

}

void affichage(ETUDIANT *tab,int n)

{

    ETUDIANT *e;

    printf("\n affichage des étudiants\n");

    for(e=tab;e<tab+n;e++)

        printf("\n %i %20c %i %i %i %5f
%f\n",e->inf.ce,e->inf.nom,e->inf.naissance.jour,e->inf.naissance.mois,e->inf.naissance.annee,e->inf.notes,e->moyenne);

   

}

3 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
13 mars 2008 à 22:11
Salut

Je vois plusieurs chose:
-Mettre: int main() ca corrigera un warning.
-Mettre les déclaration des fonctions avant le main
-Tu accedes a ton tableau etudient numero i comme ceci  e[i].nom;
Tes boucles seront de la forme for(i=0;i<n;i++) et fait autant de scanf qu'il y a de champs a remplir.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
13 mars 2008 à 22:50
Bonsoir

1) %c c'est pour afficher un caractère pas une chaîne ! il faut %s
2) %20c affichera un caractère avec 19 espaces de remplissage.
3) %5f affichera un flottant sur 5 positions pas 5 flottants !

void remplir(ETUDIANT *tab,int n)
{
   printf("\nSaisir ce,nom,jour,mois,annee,5 notes,moyenne\n");
   for (int i=0 ; i<n ; ++i)
   {
      printf("Etudiant %d : ",i + 1);
      scanf("%i %s %i %i %i %f %f %f %f %f %f"
           ,&tab[i].inf.ce
           ,&tab[i].inf.nom
           ,&tab[i].inf.naissance.jour
           ,&tab[i].inf.naissance.mois
           ,&tab[i].inf.naissance.annee
           ,&tab[i].inf.notes[0]
           ,&tab[i].inf.notes[1]
           ,&tab[i].inf.notes[2]
           ,&tab[i].inf.notes[3]
           ,&tab[i].inf.notes[4]
           ,&tab[i].moyenne);
   }
}





void affichage(ETUDIANT *tab,int n)
{
   printf("\nAffichage des étudiants\n");
   for (int i=0 ; i<n ; ++i)
      printf("\n%5i %20s %2i %2i %4i %4.1f %4.1f %4.1f %4.1f %4.1f %4.1f\n"
            ,tab[i].inf.ce
            ,tab[i].inf.nom
            ,tab[i].inf.naissance.jour
            ,tab[i].inf.naissance.mois
            ,tab[i].inf.naissance.annee
            ,tab[i].inf.notes[0]
            ,tab[i].inf.notes[1]
            ,tab[i].inf.notes[2]
            ,tab[i].inf.notes[3]
            ,tab[i].inf.notes[4]
            ,tab[i].moyenne);
}


Ce qui donne :

Saisir le nombre d'étudiants : 3



Saisir ce nom jour mois annee 5_notes moyenne
Etudiant 1 : 100 Dupont 1 2 1988 12 13 14 13 12 12.8
Etudiant 2 : 101 Bernard 17 8 1988 15 15 16 16 15 15.4
Etudiant 3 : 102 Martin 13 3 1988 10 15 14 12 16 13.4



Affichage des étudiants



  100               Dupont  1  2 1988 12.0 13.0 14.0 13.0 12.0 12.8



  101              Bernard 17  8 1988 15.0 15.0 16.0 16.0 15.0 15.4



  102               Martin 13  3 1988 10.0 15.0 14.0 12.0 16.0 13.4



Jean-François
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
13 mars 2008 à 22:52
Avec %-20s dans le printf() de la fonction affichage() pour que les noms soient alignés à gauche !

Jean-François
0
Rejoignez-nous