Probléme avec les liste en c

scarface15 -  
 scarface15 -
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;
}
Configuration: Windows Vista
Firefox 3.5.6

4 réponses

  1. chuka Messages postés 980 Statut Membre 379
     
    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
  2. chuka Messages postés 980 Statut Membre 379
     
    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
    1. scarface15
       
      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
  3. chuka Messages postés 980 Statut Membre 379
     
    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
    1. scarface15
       
      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
      1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > scarface15
         
        mets-ton code en utilisant les balises <code> si tu veux avoir plus d'aide, là c'est illisible.
        0
      2. scarface15 > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        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
  4. scarface15
     
    merci merci beaucoup chuka ca marche très très bien .......@+
    0