Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2562 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème d'encodage de liste chainée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'encodage de liste chainée

n°2300309
jujuco1996
Posté le 06-05-2017 à 15:28:18  profilanswer
 

Voilà mon problème : je dois créer une liste chainée pour contenir des articles (sur une facture). Je pense avoir fait les bonnes fonctions mais mon encodage rencontre des problèmes : lorsque j'encode (dans la fonction EncoderArticle) c'est bien encodé correctement (le printf me renvoie le bon string) mais quand je l'affiche juste après ma fonction le printf renvoie quelque chose comme ça : (Gx (et x change régulièrement). Si quelqu'un a une idée pour régler leproblème, je vous en serais reconnaissante.
 

Code :
  1. void EncoderArticle(article Produit)
  2. {
  3.   char nom[51];
  4.   printf ("\nVeuillez entrer le nom de l'article : " );
  5.   fflush(stdin);
  6.   scanf("%s", nom);
  7.   printf("%s", nom);
  8.   system("pause" );
  9.   Produit.Designation = (char*) malloc (sizeof(nom)+1);
  10.   strcpy(&(*Produit.Designation),nom);
  11.   printf ("\nVeuillez entrer le prix hors TVA de l'article : " );
  12.   fflush(stdin);
  13.   scanf ("%f", &(Produit.PrixHTVA));
  14.   printf ("\nVeuillez entrer la quantite desiree : " );
  15.   fflush(stdin);
  16.   scanf ("%d", &(Produit.Quantite));
  17.   printf("encodage : %s\n", Produit.Designation);
  18.   system("pause" );
  19. }
  20. void InsererElementListe(liste **ListeProduits)
  21. {
  22.   int trouve = 1;
  23.   int i = 1;
  24.   liste *parcours = NULL;
  25.   liste *inserer = NULL;
  26.   liste *precedent = NULL;
  27.   parcours = *ListeProduits;
  28.   inserer = (liste*) malloc(sizeof(liste));
  29.   EncoderArticle(inserer->Donnees);
  30.   printf("parcours %s\n", (parcours->Donnees).Designation);
  31.   system("pause" );
  32.   printf("Encoder OK\n" );
  33.   printf("inserer : %s\n", (inserer->Donnees).Designation);
  34.   system("pause" );
  35.   do
  36.   {
  37.       printf("condition boucle OK\n" );
  38.       printf("%s, %s, %d\n", ((inserer->Donnees).Designation), ((parcours->Donnees).Designation), i++);
  39.       system("pause" );
  40.     if (ComparerProduit(((inserer->Donnees).Designation), ((parcours->Donnees).Designation)) < 0)
  41.         {printf("Comparer OK" );
  42.         system("pause" );
  43.       trouve = 0;}
  44.     else
  45.     {
  46.         printf("else" );
  47.       precedent = parcours;
  48.       parcours = parcours->Suite;
  49.     }
  50.   }
  51.   while(parcours != NULL && !trouve);
  52.   inserer->Suite = parcours;
  53.   printf("inserer OK" );
  54.   system("pause" );
  55.   if (precedent == NULL)
  56.     *ListeProduits = inserer;
  57.   else
  58.     precedent->Suite = inserer;
  59. }


 
P.S.: les printf me servent pour le debug...

mood
Publicité
Posté le 06-05-2017 à 15:28:18  profilanswer
 

n°2300314
Totoche17
Posté le 06-05-2017 à 16:17:33  profilanswer
 

Un rapide coup d’œil me dit qu'il faut passer ton paramètre par adresse dans ta fonction EncoderArticle

n°2300315
rat de com​bat
attention rongeur méchant!
Posté le 06-05-2017 à 16:30:18  profilanswer
 

+1 pour Totoche17.
 
Pour la prochaine fois: Il est préférable de donner un code compilable, c'est à dire avec la définition/déclaration (je confonds toujours :o ) de "liste", les #include qui vont bien (même si dans ce cas présent c'est pas bien difficile de deviner ce qu'il faut) et le code pour ComparerProduit() et une main() réduit au max.
 
Surtout pour ce genre de bricolages avec des pointeurs il est très utile d'activer les warnings sur son compilateur (ce qui de toute façon devrait toujours être le cas!!), tu l'as fait? (GCC: rajouter -Wall comme paramètre en ligne de commande et -Werror si souhaité)
 
Quelque remarques:
-Tu ne vérifies pas ce que retourne malloc() (!=NULL).
-strcpy() est une fonction non sécurisée contre les buffer overflow, utiliser strncpy()!
-fflush(stdin); a un comportement indéfini selon le standard C (mais beaucoup de personnes l'utilisent et souvent ça fonctionne...).
-Il n'y a pas besoin de cast pour la valeur retournée par malloc(), sauf si par erreur tu compiles ton code avec un compilateur C++.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème d'encodage de liste chainée

 

Sujets relatifs
Constructeur de copie Liste chainée C++probleme codage en VBA
Import CSV et encodage en UTF-8Nom avec espace -----> problème de compilation
Problème de positionnement d'image sur la version mobile responsiveProbleme de fermeture d'une jframe à partir d'un bouton
Problème d'encodage ?Probleme avec un programe python
Plus de sujets relatifs à : Problème d'encodage de liste chainée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR