Les listes chaînées en langage c

Résolu/Fermé
scarface15 - 24 déc. 2009 à 12:20
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 - 24 déc. 2009 à 13:22
Bonjour,
voila jai un probléme avec mon code source en c , je voudrais créer un programme qui a la fois cré une nouvelle liste simplement chaînée,et puis il permet aussi d'ajouter un nouveau element au début de cette liste,alors voila mon code source et s'il vous plait trouvez moi l'erreur parceque l'ors de l'éxecution je ne peut pas saisir mon nouveau au début de la liste .....merci beaucoup


#include <stdio.h>
#include <stdlib.h>
typedef struct Element_Liste
{
char *marque_auto;
struct Element_Liste *suivant;
}Element;

void creation_liste(Element *nouveau_element)
{
char marque;
printf("bonjour,vous etes sur le point de creer une nouvelle liste \n");
printf("cette liste va contenir vos marques automobile de type caractere \n \n");
printf("******faites entrez une marque:******\n");

nouveau_element =malloc (sizeof (Element));
scanf("%c",&marque);
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}


int main(int argc, char **argv)
{
Element *nouveau_element;
Element *element;
char marque_a_ajouter;
creation_liste(nouveau_element);
printf("vous etes sur le point d'ajouter un nouveau element dans votre liste de marques automobile \n");
printf("veuillez saisir la nouvelle marque a ajouter dans votre liste \n");
printf("******faites entrez une nouvelle marque:******\n");

element =malloc (sizeof (Element));
scanf("%c",&marque_a_ajouter);
element->marque_auto = marque_a_ajouter;
element->suivant = nouveau_element;

printf("merci,au revoir \n");

return 0;
}

13 réponses

scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 13:13
non ca marche pas il me fait une boucle infini
2
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 13:11
ok je vais voir
1
cheikh35 Messages postés 145 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 21 septembre 2011 15
24 déc. 2009 à 12:22
Je vais voir et je te dis !!!
0
ok merci bcp cheikh35
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 déc. 2009 à 12:41
Salt,
rajoute cela:
void creation_liste(Element *nouveau_element)
{
char marque;
printf("bonjour,vous etes sur le point de creer une nouvelle liste \n");
printf("cette liste va contenir vos marques automobile de type caractere \n \n");
printf("******faites entrez une marque:******\n");

nouveau_element =malloc (sizeof (Element));
scanf("%c",&marque);
fflush(stdin);//<- vide le buffer d'entrée
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}
Ca devrait marcher....
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 12:49
oh merci beaucoup chuka pour ta réponse ca marche très bien,,,,,dis moi peut tu m'expliquer cette ligne que tu a ajouter est-ce-que c'est une fonction qui travaille un peut free ou pas .......merci beaucoup
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 déc. 2009 à 12:55
Salut,
ben en quelque sorte oui, c'est un peu comme free.. Ca réinisialise le buffer d'entrée..donc supprime tous les caracteres de celui ci (et certainement il y avait un caractere du type \n qui y restait!!)
@+
0
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 12:58
ah d'accord......et j'ai une autre question sur l'affichage de ma liste finale que dois je ajouter pour cela......merci pour ton aide......a+
0
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 13:02
chuka voila ce que j'ai ajouter mai lors de l'affichage ca ne marche pas


#include <stdio.h>
#include <stdlib.h>
typedef struct Element_Liste
{
char *marque_auto;
struct Element_Liste *suivant;
}Element;

void creation_liste(Element *nouveau_element)
{
char marque;
printf("bonjour,vous etes sur le point de creer une nouvelle liste \n");
printf("cette liste va contenir vos marques automobile de type caractere \n \n");
printf("******faites entrez une marque:******\n");

nouveau_element =malloc (sizeof (Element));
scanf("%c",&marque);
fflush(stdin);//<- vide le buffer d'entrée
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}


int main(int argc, char **argv)
{
Element *nouveau_element;
Element *element;
char marque_a_ajouter;
creation_liste(nouveau_element);
printf("vous etes sur le point d'ajouter un nouveau element dans votre liste de marques automobile \n \n");
printf("veuillez saisir la nouvelle marque a ajouter dans votre liste \n \n");
printf("******faites entrez une nouvelle marque:******\n");

element =malloc (sizeof (Element));
scanf("%c",&marque_a_ajouter);
element->marque_auto = marque_a_ajouter;
element->suivant = nouveau_element;

while (nouveau_element != NULL)
{
printf("%c\n", nouveau_element->marque_auto);
nouveau_element=nouveau_element->suivant;
}
printf("merci,au revoir \n \n");

return 0;
}
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 déc. 2009 à 13:05
une piste du style:
int main(int argc, char **argv)
{
Element *nouveau_element=malloc (sizeof (Element));;
Element *element;
Element *courant;
char marque_a_ajouter;
creation_liste(nouveau_element);
printf("vous etes sur le point d'ajouter un nouveau element dans votre liste de marques automobile \n");
printf("veuillez saisir la nouvelle marque a ajouter dans votre liste \n");
printf("******faites entrez une nouvelle marque:******\n");
scanf("%c",&marque_a_ajouter);
element =(Element*)malloc (sizeof (Element));
element->marque_auto = marque_a_ajouter;
element->suivant = nouveau_element;
courant=element;
do
{
printf("%c\n",courant->marque_auto);
courant=courant->suivant;
}
while((courant!=NULL));
printf("merci,au revoir \n");

return 0;
}
J'espere ca pourra t'aider!!
@+
0
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 13:08
jai pas eu de réponse de ta part chuka
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 déc. 2009 à 13:10
Element *courant;
courant=element;
do
{
printf("%c\n",courant->marque_auto);
courant=courant->suivant;
}
while((courant!=NULL));
par contre je pense que dans ta struct, marque_auto est un char et non un char*
typedef struct Element_Liste
{
char marque_auto;
struct Element_Liste *suivant;
}Element;
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 déc. 2009 à 13:20
Sinon, si tu veut une chaine de caractere pour la marque:
#include <stdio.h>
#include <stdlib.h>
typedef struct Element_Liste
{
char* marque_auto;
struct Element_Liste *suivant;
}Element;

void creation_liste(Element *nouveau_element)
{
char* marque=(char*)malloc(20*sizeof(char));
printf("bonjour,vous etes sur le point de creer une nouvelle liste \n");
printf("cette liste va contenir vos marques automobile de type caractere \n \n");
printf("******faites entrez une marque:******\n");
scanf("%s",marque);
fflush(stdin);
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}


int main(int argc, char **argv)
{
Element *nouveau_element=malloc (sizeof (Element));;
Element *element;
Element *courant;
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
creation_liste(nouveau_element);
printf("vous etes sur le point d'ajouter un nouveau element dans votre liste de marques automobile \n");
printf("veuillez saisir la nouvelle marque a ajouter dans votre liste \n");
printf("******faites entrez une nouvelle marque:******\n");
scanf("%s",marque_a_ajouter);
element =(Element*)malloc (sizeof (Element));
element->marque_auto = marque_a_ajouter;
element->suivant = nouveau_element;
courant=element;
do
{
printf("%s\n",courant->marque_auto);
courant=courant->suivant;
}
while((courant!=NULL));
printf("merci,au revoir \n");

return 0;
}
Bonne fete de fin d'année!!
@+
0
scarface15 Messages postés 11 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 1 mai 2010 3
24 déc. 2009 à 13:22
merci bcp chuka.......bonne féte a vous ...a+
0