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 :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 -