Liste chaine

b2_mk2 Messages postés 4 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 mai 2004 - 12 mai 2004 à 19:47
b2_mk2 Messages postés 4 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 mai 2004 - 12 mai 2004 à 21:38
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

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 mai 2004 à 20:49
: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)
0
b2_mk2 Messages postés 4 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 mai 2004
12 mai 2004 à 21:38
ok merci je vais essayer cela tout de suite.
0
Rejoignez-nous