Un gors probleme en C

Fermé
ergolo - 2 févr. 2006 à 14:23
gaby10 Messages postés 445 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 3 février 2013 - 6 févr. 2006 à 10:28
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
/*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;
	}
A voir également:

2 réponses

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
2 févr. 2006 à 17:54
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
0
gaby10 Messages postés 445 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 3 février 2013 57
6 févr. 2006 à 10:28
Merci Cracks,
0