Un gors probleme en C
ergolo
-
gaby10 Messages postés 460 Statut Membre -
gaby10 Messages postés 460 Statut Membre -
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