Probléme avec les liste en c

Fermé
scarface15 - 27 déc. 2009 à 11:54
 scarface15 - 27 déc. 2009 à 18:00
Bonjour,
alors voila mon code source je veut créer et puis remplir ma liste et après j'ai le choix entre l'ajout au début ou a la fin mais après la création et le remplissage et puis quand je fais le choix pour ajouter au début ou a la fin au moment de l'affichage de la dernière liste il me donne juste l'élément que j'ai mis au début et puis celui que j'ai ajouter au début ou a la fin ...........svp aidez moi......merci..........voila mon code......@+..


#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\n");
scanf("%s",marque);
fflush(stdin);
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}
void ajout_a_la_fin_liste(Element *nouveau_element)
{
//déclaraion
Element *tmp;
Element *element;
Element *courant;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
tmp=nouveau_element;
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element a la fin de votre liste de marques automobile : \n");
printf("\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 = NULL;
while(tmp->suivant != NULL)
{
tmp = tmp->suivant;
}
tmp->suivant = element;
nouveau_element=tmp;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
courant=nouveau_element;
printf("\n");
printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
do
{
printf("%s\n",courant->marque_auto);
courant=courant->suivant;
}
while((courant!=NULL));
printf("\n");
printf("merci,au revoir \n");
}
void ajout_au_debut_liste(Element *nouveau_element)
{
Element *element;
Element *courant;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element au debut de votre liste de marques automobile : \n");
printf("\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;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
courant=element;
printf("\n");
printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
do
{
printf("%s\n",courant->marque_auto);
courant=courant->suivant;
}
while((courant!=NULL));
printf("\n");
printf("merci,au revoir \n");
}
void remplissage_liste(Element *nouveau_element)
{
int i;
int nb;
char condition;
Element *element;
printf("maintenat vous pouvez ajouter d'autre marques automobile a votre liste que vous avez creer \n\n");
printf("voulez vous ajouter d'autre marques ? \n");
scanf("%s", &condition);
if (condition="oui");
{
printf("si c'est le cas , donc donner moi le nombre de marque que desirer ajouter a votre liste \n");
printf("le nombre de marque a ajouter \t :");
scanf("%d",&nb);
for(i=1;i<=nb;i++)
{

char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
printf("\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;
}
}
}

int main(int argc, char **argv)
{
Element *liste;
int choix;

creation_liste(liste);
remplissage_liste(liste);
printf("maintenant vous avez le choix entre l'ajout au debut ou a la fin de votre liste \n");
//demande du choix de l’utilisateur
printf("=======Menu des choix===== \n \n");
printf("1:ajouter un nouveau element au debut de votre liste. \n");
printf("2:ajouter un nouveau element a la fin de votre liste. \n \n");
printf("entrer votre choix \n");
scanf("%d",&choix);
switch (choix)
{
case 1:
ajout_au_debut_liste(liste);
break;
case 2:
ajout_a_la_fin_liste(liste);
break;
default :
printf("vous n'avez pas fait de choix \n \n");
printf("merci,au revoir \n \n");
break;
}
system("pause");
return 0;
}

4 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
27 déc. 2009 à 16:48
Salut,
#include <stdio.h>
#include <stdlib.h>
typedef struct Element_Liste
{

    char* marque_auto;
    struct Element_Liste *suivant;
}Element;
void creation_liste(Element *nouveau_element)//1-la création d'une nouvelle liste 
{
    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\n");
    scanf("%s",marque);
    fflush(stdin);
    nouveau_element->marque_auto=marque;
    nouveau_element->suivant = NULL;
}
void affiche(Element *liste)
{

    printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
    do
    {
        printf("%s\n",liste->marque_auto);
        liste=liste->suivant;
    }
    while((liste!=NULL));
    printf("\n");
    printf("merci,au revoir \n");
}
void ajout_a_la_fin_liste(Element *liste)
{
//déclaraion

    Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
    char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
    printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
    printf("vous etes sur le point d'ajouter un nouveau element a la fin de votre liste de marques automobile : \n");
    printf("\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 = NULL;
    while(liste->suivant != NULL)
    {
        liste = liste->suivant;
    }
    liste->suivant=element;
}

Element* ajout_au_debut_liste(Element * liste)
{
    Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
    char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
    printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
    printf("vous etes sur le point d'ajouter un nouveau element au debut de votre liste de marques automobile : \n");
    printf("\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 = liste;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
    return element;
}

int main(int argc, char **argv)
{
    Element *liste=(Element*)malloc (sizeof (Element));
    int choix;
    creation_liste(liste);

    do//2-ajouter d'autre élément si je veut bien sur 
    {
        printf("maintenant vous avez le choix entre l'ajout au debut ou a la fin de votre liste \n");
//demande du choix de l’utilisateur
        printf("=======Menu des choix===== \n \n");
        printf("1:ajouter un nouveau element au debut de votre liste. \n");
        printf("2:ajouter un nouveau element a la fin de votre liste. \n \n");
        printf("entrer votre choix \n");
        scanf("%d",&choix);
        switch (choix)//3-me donne le choix entre l'ajout au début de cette liste ou a la fin 
        {
            case 1:
                liste=ajout_au_debut_liste(liste);
                break;
            case 2:
                ajout_a_la_fin_liste(liste);
                break;
            default :
                printf("vous n'avez pas fait de choix \n \n");
                printf("merci,au revoir \n \n");
                break;
        }
        affiche(liste);//4-il me permet d'afficher toute ma liste depuis la création 
        }
    while (choix>0 && choix<3);
    system("pause");
    return 0;
}

J'espere cela pourra t'aider!!
@+
1
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
27 déc. 2009 à 13:43
Salut,
Tu peux essayer cela??
#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\n");
scanf("%s",marque);
fflush(stdin);
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}

void ajout_a_la_fin_liste(Element *liste)
{
//déclaraion
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
tmp=nouveau_element;
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element a la fin de votre liste de marques automobile : \n");
printf("\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 = NULL;
while(liste->suivant != NULL)
{
liste = liste->suivant;
}

void ajout_au_debut_liste(Element*premier)
{
Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element au debut de votre liste de marques automobile : \n");
printf("\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 = premier;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
premier=element;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
printf("\n");
}
void affiche(Element*liste)
{
printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
do
{
printf("%s\n",element->marque_auto);
element=element->suivant;
}
while((courant!=NULL));
printf("\n");
printf("merci,au revoir \n");
}
int main(int argc, char **argv)
{
Element *liste=(Element*)malloc (sizeof (Element));

Element *premier;
int choix;
premier=liste;
creation_liste(liste);
printf("maintenant vous avez le choix entre l'ajout au debut ou a la fin de votre liste \n");
//demande du choix de l’utilisateur
printf("=======Menu des choix===== \n \n");
printf("1:ajouter un nouveau element au debut de votre liste. \n");
printf("2:ajouter un nouveau element a la fin de votre liste. \n \n");
do
{
printf("entrer votre choix \n");
scanf("%d",&choix);
switch (choix)
{
case 1:
ajout_au_debut_liste(premier);
break;
case 2:
ajout_a_la_fin_liste(liste);
break;
default :
printf("vous n'avez pas fait de choix \n \n");
printf("merci,au revoir \n \n");
break;
}
affiche(liste);
}
while (choix>0 && choix<3);
system("pause");
return 0;
}
0
bonjour chuka,
vous avez oublier quelque déclarations mais je les ai corrigé mais au moment de l'affichage de la dernière liste il y a que le premier élément de la liste ca veut dire qu'il n'y a pas eu de chainage et voila le code corrigé et trouvez moi une solution s'il vous plait .........merci.....@+.............:

#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\n");
scanf("%s",marque);
fflush(stdin);
nouveau_element->marque_auto=marque;
nouveau_element->suivant = NULL;
}

void ajout_a_la_fin_liste(Element *liste)
{
//déclaraion
Element *tmp;
Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
tmp=liste;
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element a la fin de votre liste de marques automobile : \n");
printf("\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 = NULL;
while(liste->suivant != NULL)
{
liste = liste->suivant;
}

void ajout_au_debut_liste(Element*premier)
{
Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element au debut de votre liste de marques automobile : \n");
printf("\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 = premier;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
premier=element;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
printf("\n");
}
void affiche(Element *liste)
{
Element *courant;
courant=liste;
printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
do
{
printf("%s\n",courant->marque_auto);
courant=courant->suivant;
}
while((courant!=NULL));
printf("\n");
printf("merci,au revoir \n");
}
int main(int argc, char **argv)
{
Element *liste=(Element*)malloc (sizeof (Element));

Element *premier;
int choix;
premier=liste;
creation_liste(liste);
printf("maintenant vous avez le choix entre l'ajout au debut ou a la fin de votre liste \n");
//demande du choix de l’utilisateur
printf("=======Menu des choix===== \n \n");
printf("1:ajouter un nouveau element au debut de votre liste. \n");
printf("2:ajouter un nouveau element a la fin de votre liste. \n \n");
do
{
printf("entrer votre choix \n");
scanf("%d",&choix);
switch (choix)
{
case 1:
ajout_au_debut_liste(premier);
break;
case 2:
ajout_a_la_fin_liste(liste);
break;
default :
printf("vous n'avez pas fait de choix \n \n");
printf("merci,au revoir \n \n");
break;
}
affiche(liste);
}
while (choix>0 && choix<3);
system("pause");
return 0;
}
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
27 déc. 2009 à 14:43
Salut,
j'ai pas de quoi tester...mais pour cette fonction, je suis casiment sur...
void ajout_a_la_fin_liste(Element *liste)
{
//déclaraion

Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element a la fin de votre liste de marques automobile : \n");
printf("\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 = NULL;
while(liste->suivant != NULL)
{
liste = liste->suivant;
}
liste->suivant=element;
}

void ajout_au_debut_liste(Element*premier,Element *liste)
{
Element *element;
//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element au debut de votre liste de marques automobile : \n");
printf("\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 = premier;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
premier=element;
liste=premier;
//affichage de la derniére liste aprés la création et l'ajout au début de cette
printf("\n");
}

int main(int argc, char **argv)
{
Element *liste=(Element*)malloc (sizeof (Element));

Element *premier;
int choix;
premier=liste;
creation_liste(liste);

do
{
printf("maintenant vous avez le choix entre l'ajout au debut ou a la fin de votre liste \n");
//demande du choix de l’utilisateur
printf("=======Menu des choix===== \n \n");
printf("1:ajouter un nouveau element au debut de votre liste. \n");
printf("2:ajouter un nouveau element a la fin de votre liste. \n \n");
printf("entrer votre choix \n");
scanf("%d",&choix);
switch (choix)
{
case 1:
ajout_au_debut_liste(premier,liste);
break;
case 2:
ajout_a_la_fin_liste(liste);
break;
default :
printf("vous n'avez pas fait de choix \n \n");
printf("merci,au revoir \n \n");
break;
}
affiche(liste);
}
while (choix>0 && choix<3);
system("pause");
return 0;
}
0
ca ne marche tjrs pas comme je voulais, mais merci bcp chuka , alors maintenant je vais vou expliquer ce que je veut faire au juste , je veut crée un programme qui me permet :
1-la création d'une nouvelle liste
2-ajouter d'autre élément si je veut bien sur
3-me donne le choix entre l'ajout au début de cette liste ou a la fin
4-il me permet d'afficher toute ma liste depuis la création
normalement vous m'avez compris maintenant ............merci bcp pour ton aide chuka.............;@+
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661 > scarface15
27 déc. 2009 à 15:29
mets-ton code en utilisant les balises <code> si tu veux avoir plus d'aide, là c'est illisible.
0
scarface15 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
27 déc. 2009 à 15:47
cliquer sur la flèche en bas ...........mais voila mon code
#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\n");

scanf("%s",marque);

fflush(stdin);

nouveau_element->marque_auto=marque;

nouveau_element->suivant = NULL;
}

void ajout_a_la_fin_liste(Element *nouveau_element)
{
//déclaraion

Element *tmp;
Element *element;
Element *courant;

//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
tmp=nouveau_element;
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element a la fin de votre liste de marques automobile : \n");
printf("\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 = NULL;
while(tmp->suivant != NULL)
{
tmp = tmp->suivant;
}
tmp->suivant = element;
nouveau_element=tmp;

//affichage de la derniére liste aprés la création et l'ajout au début de cette

courant=nouveau_element;

printf("\n");

printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
do
{
printf("%s\n",courant->marque_auto);

courant=courant->suivant;
}
while((courant!=NULL));

printf("\n");

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

void ajout_au_debut_liste(Element *nouveau_element)
{

Element *element;
Element *courant;

//allocation d'un nouveau espace pour le nouveau element ajouter au début de la liste
char* marque_a_ajouter=(char*)malloc(20*sizeof(char));
//le saut d'une ligne
printf("\n");
//l'ajout d'un nouveau element au début de notre liste déja créer
printf("vous etes sur le point d'ajouter un nouveau element au debut de votre liste de marques automobile : \n");
printf("\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;


//affichage de la derniére liste aprés la création et l'ajout au début de cette

courant=element;

printf("\n");

printf("votre liste de marques contient les marques automobiles suivantes : \n\n");
do
{
printf("%s\n",courant->marque_auto);

courant=courant->suivant;
}
while((courant!=NULL));

printf("\n");

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

int main(int argc, char **argv)
{
Element *liste;
int choix;
creation_liste(liste);

printf("maintenant vous avez le choix entre l'ajout au debut ou a la fin de votre liste \n");
//demande du choix de l’utilisateur
printf("=======Menu des choix===== \n \n");
printf("1:ajouter un nouveau element au debut de votre liste. \n");
printf("2:ajouter un nouveau element a la fin de votre liste. \n \n");
printf("entrer votre choix \n");
scanf("%d",&choix);
switch (choix)
{

case 1:
ajout_au_debut_liste(liste);

break;

case 2:
ajout_a_la_fin_liste(liste);

default:

printf("vous n'avez pas fait de choix,merci");
break;
}
return 0;
}
0
merci merci beaucoup chuka ca marche très très bien .......@+
0