usa_satriani S.P.Q.R. | Salut,
est-ce que quelqu'un peut m'aider, je tourne en rond et je comprends pas pourquoi
Notemment dans la fonction position je comprends pas pourquoi les pointeurs ptrG et ptrD ne sont pas mis à NULL
Code :
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef char chaine[25] ;
- typedef struct elemt
- {
- chaine clef ;
- void * ptinfo;
- struct elemt * ptrG, * ptrD ;
-
- } element ;
- typedef struct eleve
- {
- char nom[25] ;
- float moyenne ;
-
- } eleve;
-
- element * position ( chaine cle, void * ptinf , element * elePtr )
- {
- if (elePtr == NULL)
- {
- printf("racine est NULL\n" ) ;
- elePtr = (element *)malloc ( sizeof(elePtr) );
- elePtr->ptinfo = ptinf ; /* on affecte l'info */
- strcpy(elePtr->clef, cle) ; /* on met la clef */
- (elePtr->ptrG) = NULL ; /* pointeur gauche à NULL */
- elePtr->ptrD = NULL ; /* pointeur droite à NULL */
- printf("cle : %s\n", cle);
- printf("clef elePtr : %s\n", elePtr->clef);
- printf("adresse fils gauche %p\n" , (elePtr->ptrG));
- printf("adresse fils droite %p\n" , (elePtr->ptrD));
- }
- else
- {
- printf("racine vaut non NULL et %p\n", elePtr);
- printf("cle : %s\n", cle);
- printf("clef elePtr : %s\n", elePtr->clef);
- printf("adresse fils gauche %p\n" , elePtr->ptrG);
- printf("adresse fils droite %p\n" , elePtr->ptrD);
- if ( strcmp(cle, elePtr->clef) <= 0 )
- {
- printf("on part a gauche...\n" );
- printf("cle %s , ptinf %p, ptrD %p\n" , cle , ptinf , elePtr->ptrG );
- elePtr->ptrG = position ( cle , ptinf , elePtr->ptrG );
- }
- else
- {
- printf("on part a droite...\n" );
- printf("cle %s , ptinf %p, ptrD %p\n" , cle , ptinf , elePtr->ptrD );
- elePtr->ptrD = position ( cle , ptinf , elePtr->ptrD );
- }
- }
- printf("pointeur renvoye %p\n", elePtr);
- return elePtr ;
- }
- void edition ( element * elePtr )
- {
- eleve * temp ;
- edition ( elePtr->ptrG ) ;
- printf("%s moyenne : %f\n", temp->nom , temp->moyenne ) ;
- edition ( elePtr->ptrD ) ;
- }
- void saisie ( element ** elePtr )
- {
- eleve * toto ;
- toto = (eleve *)(malloc( sizeof(eleve) ) );
- printf("saisir le nom\n" );
-
- scanf("%s", toto->nom);
-
- printf("saisir moyenne\n" );
-
- scanf("%f", &(toto->moyenne));
- *elePtr = position ( toto->nom , toto , *elePtr ) ; /* *elePtr est racine */
- }
- int main()
- {
- element * racine = NULL ;
- int i = 5;
- while (i)
- {
- printf("racine %p\n", racine);
- saisie(&racine);
- }
- system("PAUSE" );
- return 0;
- }
|
Merci beaucoup. |