[C] - Je comprends plus tout :/

- Je comprends plus tout :/ [C] - C++ - Programmation

Marsh Posté le 13-06-2002 à 22:40:12    

Bonjour, jai manqué 2 cours de C car j'etais malade ( sisi c vrai :) ) Le prog c que je suis un peu largué, voici l'ennoncé suivante, + la reponse, mais il y a qques truc que je ne parviens pas a comprendre... est ce que qqun pourrais m'eclairer??? j'ai ajouter un commentaire a coté des lignes qui m'echapent . Merci d'avance pour vos reponse ....  
 
 

Code :
  1. /*ecrire un programme qui lit une série de nombres(le dernier étant 0),
  2. les relie logiquement en mémoire et affiche cette liste.*/
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <malloc.h>
  6. #include <stdlib.h>
  7. void main()
  8. {
  9. int nbr;
  10. struct s{int nb;struct s *suiv;}*deb,*crt; // pourquoi declarer 2 pointeur?
  11. deb=(struct s*)malloc(sizeof(struct s)); //je capte pas tout a cette ligne non plus
  12.   crt=deb;
  13. printf("\nEntrer un nombre (0 pour terminer):" );
  14. scanf("%d",&nbr);
  15. crt->nb=nbr; //que fait exactement ceci?
  16.   crt=deb;
  17. while(nbr!=0)
  18. {
  19.    crt->suiv=(struct s*)malloc(sizeof(struct s)); // ?????????
  20.    crt=crt->suiv;
  21.    crt->nb=nbr ;
  22.    printf("\nEntrer un nombre (0 pour terminer): " );
  23. scanf("%d",&nbr);
  24. }
  25.    crt->suiv=NULL;
  26. crt=deb;
  27. int i=0 ;
  28. while(crt!=NULL)
  29. {
  30.    if(i==4)
  31.     {
  32.       //free(crt);
  33.     crt=crt->suiv;
  34.       i++;
  35.       }
  36.    crt=crt->suiv;
  37.    printf("\nLe nombre est n° %d : %d",++i ,crt->nb);
  38.  
  39.    }
  40. getch();
  41. }

Reply

Marsh Posté le 13-06-2002 à 22:40:12   

Reply

Marsh Posté le 13-06-2002 à 23:00:50    

pourquoi declarer 2 pointeur?
deb est utilisé comme sauvegarde du point de la tête de liste.
crt est utilisé pour modifier la liste et se balader dedans.
 
deb=(struct s*)malloc(sizeof(struct s)); alloue à deb une place mémoire permetant d'une taille égale à la taille d'un struct s.
=> deb est un struct* => malloc doit allouer de la mémoire "de type" struc* (deb=(struct s*)malloc(sizeof(struct s));)
deb=(struct s*)malloc(sizeof(struct s));  =>  sizeof renvoie la taille d'un élément en l'occurence ici d'un struct.
 
Le premier while permet à l'utilisateur de créer une liste d'entiers.
crt->nb=nbr intialise à nbr le champ nb de l'élément pointé par crt.
crt->suiv=(struct s*)malloc(sizeof(struct s)); alloue un nouvel espace mémoire au pointeur suiv de crt (cf plus haut, c'est pareil).
Ensuite, deb est utilisé pour ramener crt en début de liste.

Reply

Marsh Posté le 13-06-2002 à 23:09:42    

raah, merci pour ces explication tres claires :)
 
je v voir si j'arrive a m'en sortir avec ca merci beaucoup d'avoir pris le temps de tout detailler !!!  
a+

Reply

Marsh Posté le 15-06-2002 à 10:50:47    

le coup du crt->nb c équivalent a (*crt).nb

Reply

Marsh Posté le 15-06-2002 à 11:03:18    

c'est des listes chainées ton truc en fait..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed