Un gors probleme en C
ergolo
-
gaby10 Messages postés 445 Date d'inscription Statut Membre Dernière intervention -
gaby10 Messages postés 445 Date d'inscription Statut Membre Dernière intervention -
salut cher CCM,
j'ai un probleme: en fait je fais un programme en C,mais lorsque je l'execute, il ne me permet pas d'obtenir ce que j'attend pourtan il me semble-t-il le programme est bien ecrit.En realite le progrmme demande a inserer un certain nombre d'elements dans une liste puis l'afficher. Le voici,SIL VOUS PLAIT dites moi ce qui ne va pas
j'ai un probleme: en fait je fais un programme en C,mais lorsque je l'execute, il ne me permet pas d'obtenir ce que j'attend pourtan il me semble-t-il le programme est bien ecrit.En realite le progrmme demande a inserer un certain nombre d'elements dans une liste puis l'afficher. Le voici,SIL VOUS PLAIT dites moi ce qui ne va pas
/*Programme de gestion d'une liste d'elements*/ #include<stdio.h> #include<stdlib.h> #include<conio.h> typedef struct liste{ int info; liste *suiv; }liste;liste *l; void insert( liste *pt,int val){ liste *l1,*l2;int i; l1=(liste *)malloc(sizeof(liste)); if(l1==NULL) printf("\tpas de place \n"); else{/* for(i=0;i<=4;i++){ printf("\t\tEntrer un element\n"); scanf("%d",&val);*/ (*l1).info=val; (*l1).suiv=NULL; if(pt==NULL){pt=l1;} else{l2=pt; while(l2->suiv!=NULL){ l2=l2->suiv;} l2->suiv=l1;} printf("\t\tElement insere\n"); }} int affiche(liste *q){ printf("\t\t\tVoici les elements de la liste\n"); printf("\nliste:"); while(q!=NULL){ printf("%d",q->info); q=q->suiv;}return 1; } int main(){ int elt; clrscr(); insert(l,elt); affiche(l); getch(); return 1; }
2 réponses
Salut,
1- mettre en global la variable l ne sert à rien
2- insert() peut modifier la valeur du pointeur qui représente l'ancre de ta
liste, donc il faut passer l'adresse de cette variable.
3- utilise toujours la notation -> pour les pointeurs, c'est plus lisible
Insert devient :
Et main :
A+, crabs
1- mettre en global la variable l ne sert à rien
2- insert() peut modifier la valeur du pointeur qui représente l'ancre de ta
liste, donc il faut passer l'adresse de cette variable.
3- utilise toujours la notation -> pour les pointeurs, c'est plus lisible
Insert devient :
void insert( liste **pt,int val){ liste *l1,*l2;int i; l1=(liste *)malloc(sizeof(liste)); if(l1==NULL) { printf("\tpas de place \n"); return ; } l1->info=val; l1->suiv=NULL; if(*pt==NULL) *pt=l1; else { /* recherche le dernier élément de la liste */ for(l2=*pt; l2->suiv; l2=l2->suiv) ; /* le ; est important ... */ l2->suiv=l1; } printf("\t\tElement insere\n"); }
Et main :
int main(){ liste* l ; int elt; /* je vois pas la saisie ou l'init pour l'insert... */ clrscr(); insert(&l,elt); affiche(l); getch(); return 1; }
A+, crabs