Problem d'affichage d'un tableau de float préalablement stoker avec memcpy()

Signaler
Messages postés
38
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 mai 2005
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
voila le code que j'ai tapé dans mon prog, j'ai pas mis la source entiere je vous mets kand meme l'arbre à noter que
Liste_note_TP et Liste_note_TD sont des tableaux de float pourriez vous m'aidez c urgent.
A l'affichage j'ai 0.0

typedef struct Arbre
{
int Noeud;
char nom[MAX];
char prenom[MAX];
float liste_note_TP[MAX];
float liste_note_TD[MAX];
char tel[MAX];
struct Arbre *SAG;
struct Arbre *SAD;

} Arbre;

memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);
memcpy(Racine->liste_note_TD, Liste_note_TD, sizeof(float)*MAX);

lorsque il vient le moment d'afficher:

printf("\n\tListe des notes de tp: %.1f",Racine->liste_note_TP);
printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD);

11 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Racine->liste_note_TP[i] a afficher dans le printf mais pas l'adresse du tableau.
BruNews, ciao...
Messages postés
38
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 mai 2005

voila la maniere dont je saisis mes notes
on notera ke j'eregistre d'abord dans a de type float et et apres je fais prends la veleur correspondante a la case du tableau car si je fais un scanf("%f",Liste_note_TP[i] = a);
j'ai un run time Error... je sais pas pkoi ?!

for(i=0; i< nbr; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &a);
Liste_note_TP[i] = a;
}

memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);
memcpy(Racine->liste_note_TD, Liste_note_TD, sizeof(float)*MAX);

printf("\n\tListe des notes de tp: %.1f",Racine->liste_note_TP[i]);
printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD[j]);

voila mon nouv code et j'ai toujours des 0.0... HelP
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Moi, les scanf et autres CONSOLEries...
BruNews, ciao...
Messages postés
38
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 mai 2005

BruNews on s'en fout des scanf !

j'ai apporté la correction que tu m'avais dit ie:
si j'ai bien interprété:

dans ma fonction d'affichage

printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD[i]);

mais ça m'affiche pas les bonnes valeurs...
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
salut, juste une tite astuce pour eviter ce genre de déclaration
struct Arbre *SAG;
tu peut faire

typedef struct S_Arbre
{
int Noeud;
char nom[MAX];
char prenom[MAX];
float liste_note_TP[MAX];
float liste_note_TD[MAX];
char tel[MAX];
PT_Arbre SAG;
PT_Arbre SAD;

} Arbre, *PT_Arbre;

désolé si tu le savais deja
Messages postés
38
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 mai 2005

lol merci kand meme djl !
oaui je le savais mais remonte dans la conversation et essaye de resoudre mon blem !

Merci d'avance :-) !
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Et bien teste un reaffichage illico du float que tu inseres dans ton tableau de float pour etre certain.
BruNews, ciao...
Messages postés
38
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 mai 2005

J'affiche toute de suite apres avoir saisie mon tableau j'ai okun blem a l'affichage ?!

le problem ne viendrait il pas de :

memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);

ou de mon printf ?!
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui c'est troublant ton probleme, le bout de code que tu montre me semble juste, peut etre que l'erreur est en amont?
Messages postés
38
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 mai 2005

CA ME SOULE TROP ALORS VOILA LE CODE
alors suivez la demarche suivante, tapez 1 saisissez une fiche etudiant puis faite 0 pour kitter la saisie d'un etudiant.
faites 2 cad afficher vous verrez le pb...

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define MAX 30
float Liste_note_TP[MAX], Liste_note_TD[MAX];
char NOM[MAX], PRENOM[MAX], TEL[MAX], TEL1[MAX];
int TD, i, j;
//float Liste_note_TP[MAX], Liste_note_TD[MAX];

typedef struct Arbre
{
int td;
int Noeud;
char nom[MAX];
char prenom[MAX];
float liste_note_TP[MAX];
float liste_note_TD[MAX];
char tel[MAX];
struct Arbre *SAG;
struct Arbre *SAD;

} Arbre;

//on affiche l'arbre de maniere decroissante
AfficherArbreCroissant(Arbre *Racine)
{
if (Racine!=NULL)
{
AfficherArbreCroissant(Racine->SAG);
printf("\n\n\tTd:%d ",Racine->td);
printf("\n\tNom: %s",Racine->nom);
printf("\n\tPrenom: %s",Racine->prenom);
printf("\n\tTelephone: %s",Racine->tel);
printf("\n\tNumero de secu: %d", Racine->Noeud);
printf("\n\tListe des notes de tp: %.1f",Racine->liste_note_TP[i]);
printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD[j]);
AfficherArbreCroissant(Racine->SAD);
}
}

//creation de mon repertoire
Arbre* CreerNoeud(Arbre *Racine,int valeur, char NOM[MAX], char PRENOM[MAX], float Liste_note_TP[MAX], float Liste_note_TD[MAX], char TEL[MAX])
{

if (Racine!= NULL)
{
if (Racine->Noeud>valeur)
{
Racine->SAG=CreerNoeud(Racine->SAG,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
}
else
{
Racine->SAD=CreerNoeud(Racine->SAD,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
}
}
else
{
Racine=(Arbre*)malloc(sizeof(Arbre));
Racine->Noeud = valeur;
strcpy(Racine->nom, NOM);//je recopie ma chaine de caractere stoker dans NOM dans mon arbre
strcpy(Racine->prenom, PRENOM);//idem
strcpy(Racine->tel, TEL);//idem
Racine->td = TD;
//je copie le bloc d'information stoker dans Liste_note_TP vers
//Racine->liste_note_TP
memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);
memcpy(Racine->liste_note_TD, Liste_note_TD, sizeof(float)*MAX);
Racine->SAD = NULL;
Racine->SAG = NULL;
}

return Racine;
}

//permet d'enregistrer l'arbre dans un fichier
EnregArbre(Arbre *Racine, char *NomFic)
{
int nb;

FILE * fic;
fic = fopen(NomFic,"at");

if (Racine!=NULL)
{
nb=Racine->Noeud;
fwrite(&nb,sizeof(int),1,fic);

fclose(fic);
if (Racine->SAD!=NULL || Racine->SAG!=NULL)
{
EnregArbre(Racine->SAG,NomFic);
EnregArbre(Racine->SAD,NomFic);
}
}
}

//permet de charger l'arbre qui avait été sauvé dans un fichier
Arbre *ChargerArbre(Arbre *Racine, char * NomFic)
{
int nb;

FILE * fic;
fic = fopen(NomFic,"rt");
fread(&nb,sizeof(int),1,fic);

while (!feof(fic))
{
Racine = CreerNoeud(Racine,nb,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
fread(&nb,sizeof(int),1,fic);

}
fclose(fic);

return Racine;
}

//Je recherche l'eleve avec son N° de Td, son nom et son Tel
Arbre* RechercheNoeud(Arbre *Racine, int valeur)
{
if (Racine!=NULL)
{
if( (Racine->Noeud > valeur) )
{
Racine = RechercheNoeud(Racine->SAG,valeur);
}
else
{
if( (Racine->Noeud < valeur) )
{
Racine=RechercheNoeud(Racine->SAD,valeur);
}
}

//return Racine;
}
return Racine;
}

Arbre *Supprimer_Eleve(Arbre * Racine, int valeur)
{
Arbre *NoeudASupprimer;
if ( Racine->Noeud == valeur ) // on a trouvé l'élément à supprimer
{
NoeudASupprimer=Racine;

if( NoeudASupprimer->SAG == NULL ) //si ya pa de SAG, on retourne SAD
return NoeudASupprimer->SAD;
else
{
Racine=NoeudASupprimer->SAG; //sinon on recherche dans SAG l'endroit pour insérer le SAD
while (Racine->SAD!=NULL)
{
Racine=Racine->SAD;
}
Racine->SAD=NoeudASupprimer->SAD;
return NoeudASupprimer->SAG;
}
free(NoeudASupprimer);
}
else
{
if (Racine->Noeud>valeur)
{
Racine->SAG=Supprimer_Eleve(Racine->SAG,valeur);
}
else
{
Racine->SAD=Supprimer_Eleve(Racine->SAD,valeur);
}
}
return Racine;
}

int Menu(void)
{
int Choix;
do
{
system("cls"); //efface l'écran
printf("\n\t==================================================================");
printf("\n\t= =");
printf("\n\t= Gestion d'un repertoire d'eleve =");
printf("\n\t= =");
printf("\n\t==================================================================\n\n\n");
printf("\n\n\t Menu Pricipal\n");
printf("\n\t 1- Ajouter une fiche eleve au repertoire");
printf("\n\t 2- Afficher le repertoire par ordre de td decroissant");
printf("\n\t 3- Rechercher un noeud");
printf("\n\t 4- Supprimer un etudiant du repertoire");
printf("\n\t 5- Copier le repertoire dans un fichier");
printf("\n\t 6- Charger l'arbre à partir du fichier de sauvegarde");
printf("\n\t 7- Quitter\n");
printf("\n\n\n\n\n\n\n\tChoix :");
scanf("%d",&Choix);

} while (Choix <1 || Choix > 7);
system("cls");

return Choix;
}

void main(void)
{

int valeur, nbr, nbr1, nbr2, nbr3; //i, j; //k, l;
/*char NOM[MAX], PRENOM[MAX], TEL[MAX], TEL1[MAX]*/ float a, b, c, d ;
//float Liste_note_TP[MAX], Liste_note_TD[MAX];
int Choix;
char *NomFic="Fic.txt";
Arbre *Racine;
//Arbre *TelRecherche=NULL;
Arbre *RepRecherche;
//on initialise le pointeur de tete
Racine=NULL;
Choix = Menu();

while (Choix!=7)
{
if (Racine==NULL && Choix>1 && Choix <7)
{
printf("Vous devez d'abord saisir un arbre");
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
}
else
{
switch (Choix)
{
case 1 :
printf("\n\t(0 pour finir la saisie)\n\n");
printf("\n\tEntrer le Numero de securite sociale de l'individu:");
scanf("%d",&valeur);

if(valeur != 0)
{

printf("\n\n\tSaisissez a present les caracteristiques de l'eleve\n");
printf("\n\n\tNom: ");
scanf("%s", NOM);
printf("\n\tPrenom: ");
scanf("%s", PRENOM);
printf("\n\tTd: ");
scanf("%d", &TD);
printf("\n\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer le nombre de note de Tp:");
scanf("%d", &nbr);
for(i=0; i< nbr; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &a);
Liste_note_TP[i] = a;

}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("\n\tNote No%d: ", j+1);
scanf("%f", &b);
Liste_note_TD[j] = b;

}
}

while (valeur != 0)
{
system("CLS");
Racine=CreerNoeud(Racine,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
printf("\n\tEntrer le Numero de securite sociale de l'individu:");
scanf("%d",&valeur);

if ( valeur != 0 )
{
printf("\n\tSaisissez a present les caracteristiques de l'eleve\n");
printf("\n\n\tNom: ");
scanf("%s", NOM);
printf("\n\tPrenom: ");
scanf("%s", PRENOM);
printf("\n\tTd: ");
scanf("%d", &TD);
printf("\n\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer le nombre de note de TP:");
scanf("%d", &nbr2);
for(i=0; i < nbr2; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &c);
Liste_note_TP[i] = c;
}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr3);
for(j=0; j<nbr3; j++)
{
printf("\n\tNote No%d: ", j+1);
scanf("%f", &d);
Liste_note_TD[j] = d ;

}
}

}
break;



case 2 :

AfficherArbreCroissant(Racine);
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;



case 3 :

printf("\n\tNumero de Td de l'eleve a rechercher: ");
scanf("%d", &valeur);
//printf("\n\tTel:");
//scanf("%s" , TEL1);
RepRecherche = RechercheNoeud(Racine,valeur);
//strcpy(TelRecherche->tel, TEL1); if( (RepRecherche->Noeud valeur) )// && (TelRecherche->tel TEL1) )
{
printf("\n\tL'etudiant au No de Secu Scial:%d a ete trouve !", RepRecherche->Noeud);
}
else//printf("\n\t%s", TelRecherche->tel);
if(RepRecherche->Noeud != valeur)
{
printf("Impossible de trouver la valeur recherch\202e");
}

printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;


case 4 :

printf("No de Securite Sociale de l'eleve a supprime\205:");
scanf("%d",&valeur);
Racine=Supprimer_Eleve(Racine,valeur);
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;

case 5:

system("del Fic.txt");
system("cls");
EnregArbre(Racine,NomFic);
printf("Arbre enregistr\202\n");
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;

case 6:

system("CLS");
Racine=ChargerArbre(Racine,NomFic);
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;

}

}

Choix=Menu();
}
}
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Faut faire une boucle pour afficher le tableau !!!

for(i = 0; i < MAX; i++)
{
printf("\n\tListe des notes de tp: %.1f",
Racine->liste_note_TP[i]);
}