Liste chaine

Signaler
Messages postés
4
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 mai 2004
-
Messages postés
4
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 mai 2004
-
Bonjour je doit dire que c'est bien la premiere fois que je ne trouve pas de solution a mon probleme avec vos archive.
Donc vu que ca fait maintenant quelque heure que je passe dessus sans rtrouver la solution.

donc je vous passe le code (un peu long dsl) et je vous explique apres

#include <stdio.h>
typedef enum bol{FAUX,VRAI} BOOLEAN;

typedef struct{
  int x1;
  int y1;
  int coul;
}spoint;

typedef struct{
  int x1;
  int y1;
  int x2;
  int y2;
  int coul;
}ssegment;

typedef union{
  spoint pt;
  ssegment seg;
}toto;

typedef struct figure{
  toto forme;
  int typeFigure;
  struct figure *svt;
}figure;

int main()
{

  figure *courant;
  figure *nouveau;
  figure *debut;
  int res,x1,y1,i;

  debut=NULL;

  nouveau=(void *) malloc (5*sizeof(figure));

  printf("0: point\n");
  printf("1: segment\n");

    for(i=0;i<2;i++){
    printf("donner votre choix [ ]\b\b");
    scanf("%d",&res);
    switch (res){
    case 0 : 
      nouveau->typeFigure=0;
      printf("donner les coordonnées en x\n");
      scanf("%d",&nouveau->forme.pt.x1); 
      printf("donner les coordonnées en y\n");
      scanf("%d",&nouveau->forme.pt.y1);
      nouveau->svt=debut;
      debut=nouveau;
      if(nouveau->svt == NULL){
printf("null\n");
      }else{
printf("%d\n",nouveau->svt->typeFigure);
      }
      break;
      
    case 1 :
      nouveau->typeFigure=1;
      printf("donner les coordonnées 1 en x\n");
      scanf("%d",&nouveau->forme.seg.x1); 
      printf("donner les coordonnées 1 en y\n");
      scanf("%d",&nouveau->forme.seg.y1);
      printf("donner les coordonnées 2 en x\n");
      scanf("%d",&nouveau->forme.seg.x2); 
      printf("donner les coordonnées 2 en y\n");
      scanf("%d",&nouveau->forme.seg.y2);
      nouveau->svt=debut;
      debut=nouveau;
      break;
    }
      }

    courant=debut;
    for(i=0;i<2;i++){
    switch(courant->typeFigure){
    case 0:
      printf("point:\nx1 = %d\ny1 = %d\n\n",courant->forme.pt.x1,courant->forme.pt.y1);
      courant=courant->svt;
      break;

    case 1:
      printf("segment:\nx1 = %d\ny1 = %d\nx2 = %d\ny2 = %d\n\n",courant->forme.seg.x1,courant->forme.seg.y1,courant->forme.seg.x2,courant->forme.seg.y2);
      courant=courant->svt;
      break;
      }
    if(courant==NULL){
      printf("null\n");
    }
  }
}


Alor ce n'est pas un probleme de compilation, c'est un probleme de liste chaine (d'ou le titre).
le probleme c'est que le premier maillons ce passe tres bien mais lorsque je cree un deuxieme mailons ca ne marche plus.
Ceci est du au fait que avec un 2eme maillon je n'est pas courant egale a NULL (ce qui fait que l'orsque je met un tant que j'ai droit a une boucle infinie)
apres quelque test il apparaiterait que le probleme se situe ici:
      nouveau->svt=debut;
      debut=nouveau;

Mais je ne vois vraiment pas ou est le probleme.

donc si vous pouvez m'aider je vous remerci d'avance.

2 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
:shock) #include <stdlib.h> pour malloc, tu tape sur la declaration implicite

ca doit etre pour ca que le cast voir * t'es impose, il ne sert a rien

tu devrai diviser le code en fonction, ca serai plus claire, genre ListeAjouterElement ListeSupprimerElement,... et tu pourrait trouver ton bug plus facilement (moin de code à tracer)
Messages postés
4
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 mai 2004

ok merci je vais essayer cela tout de suite.