Probleme avec l'affichage dans Strusture

Résolu
Signaler
Messages postés
7
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
15 janvier 2012
-
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
-
Salut Les Amis
j'ai trouvé un probleme dans mon programme de gestion d'eleves
plus exactement lors de l'affichage ou le programme m'affiche que le 1er nom de l'eleve1 les autre eleves ça m'affiche
que leur prenom age et moyenne generale
je vous laisse avec le code source qui compile sans aucun probleme
#include <stdio.h>
#include <stdlib.h>

int NbrEleve;
struct Etudiant
                {
    char Nom[20];
    char Prenom[20];
    int Age;
    float Note[4];
                }Etd[120];
void Menu(void)
{
    int i;
    char   *MENU_CHAMP[]={"1 : Lecture des elements","2 : Affichage des elements",
                        "3 : Ajout d'un element", "4 : Recherches des elements",
                        "5 : Modification des elements","6 : Suppression des elements",
                        "7 : Tri des element","Echap : Sortir" };
    for(i=0;i<8;i++)
    {
        printf("%s\n",MENU_CHAMP[i]);
    }
}
//Ma fonction de saisie
void Saisie(void)
{
    int i,j;
    printf("Saisir le nombre d'eleves ? : ");
    scanf("%d",&NbrEleve);
    system("cls");
    for(i=0;i<NbrEleve;i++)
    {
            printf("Saisir le nom de l'eleve[%d] ? : ",i+1);
            scanf("%s",Etd[i].Nom);
            printf("Saisir le prenom de l'eleve[%d] ? : ",i+1);
            scanf("%s",Etd[i].Prenom);
            printf("Saisir l'age de l'eleve[%d] ? : ",i+1);
            scanf("%d",&Etd[i].Age);
            printf("Saisir la note 1 de l'eleve[%d] ? : ",i+1);
            scanf("%f",&Etd[i].Note[0]);
            printf("Saisir la note 2 de l'eleve[%d] ? : ",i+1);
            scanf("%f",&Etd[i].Note[1]);
            printf("Saisir la note 3 de l'eleve[%d] ? : ",i+1);
            scanf("%f",&Etd[i].Note[2]);
            printf("Saisir la note 4 de l'eleve[%d] ? : ",i+1);
            scanf("%f",&Etd[i].Note[3]);
            system("cls");
    }
    //Calcul de moyenne pour chaque eleve
    for(i=0;i<NbrEleve;i++)
    {
        Etd[i].Note[4]=0;
        for(j=0;j<4;j++)
        {
            Etd[i].Note[4]+=Etd[i].Note[j];
        }
         Etd[i].Note[4]=Etd[i].Note[4]/4;
    }
    printf("Saisie Complete");
    getch();
}
//Ma fonction d'affichage
void Affichage(void)
{
    int i;
    for(i=0;i<NbrEleve;i++)
    {
        printf("%s\t",Etd[i].Nom);
        printf("%s\t",Etd[i].Prenom);
        printf("%d\t",Etd[i].Age);
        printf("%.2f\t\n",Etd[i].Note[4]);
    }
    getch();
}


int main()
{
    int choix;
    do
    {
        system("cls");
        Menu();
        printf("\nSaisir Votre Choix ? : ");
        scanf("%d",&choix);
        switch (choix)
        {
            case 1:system("cls");Saisie();break;
            case 2:system("cls");Affichage();break;
            case 3:system("cls");break;
            case 4:system("cls");break;
            case 5:system("cls");break;
            case 6:system("cls");break;
            case 7:system("cls");break;
            case 27:system("cls");break;
            default :system("cls");printf("Desole ce choix ne figure pas dans le menu!!!\n\a\a\a");break;
        }
    }while(choix!=27);
    return 0;
}


dans la fonction d'affichage si je permute la ligne d'affichage des noms et prenoms le meme probleme m'arrive avec les prenom et les nom s'affiche tous correctement
pour bien me comprendre veilleuz SVP compiler et faire l'example avec 2 ou 3 eleves et merci infiniment

3 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Bonjour,

le champ Note de ta structure est un tableau de 4 éléments.
Or, pour calculer la moyenne de chaque élève tu utilises le 5ème élément qui n'est pas défini.

La ligne
Etd[i].Note[4]=0;

vient donc jardiner dans le tableau de structure et effacer des données saisies.

@++
Messages postés
7
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
15 janvier 2012

Merci infiniment,Juste Une petite remarque si je veux utiliser ces fonctions mais cette fois ci ayant des paramètres sous forme de pointeurs Quelles indications et remarques vous me donnerez a suivre!!!
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Ca dépend de ce que tu veux faire.
Si c'est pour éviter les variables globales dans ton programme, tu peux par exemple transformer ton programme comme ceci:
void Saisie( int * NbrEleve , Etudiant * Etd ){[...]}

void Affichage( const Etudiant * Etd , int NbrEleve){[...]}

int main()
{
    int NbrEleve = 0 ;
    Etudiant Etd[120] ;
    int choix;
    do
    {
        system("cls");
        Menu();
        printf("\nSaisir Votre Choix ? : ");
        scanf("%d",&choix);
        switch (choix)
        {
            case 1:system("cls");Saisie( &NbrEleve , Etd );break;
            case 2:system("cls");Affichage( Etd );break;
[...]


Mais est-ce bien ton besoin ?