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

  FORUM HardWare.fr
  Programmation
  C

  [C/C++] Liste chainée et chaine de caractére

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Liste chainée et chaine de caractére

n°1521635
frodon131
Mon précieux
Posté le 28-02-2007 à 12:59:49  profilanswer
 

Salut à tous
 
voila mon probleme, je defini une structure de liste chainée de produit donc qui comporte 4 valeurs: prix,code,quantitee et un nom.
c'est l'affectation de ces valeurs qui me posent pb.
Pour le prix/code/quantitée pas de probleme ; ce sont des entiers.
Mais pour le nom que je rentre comme chaine de caractere, le compilateur veut pas.
"ISO C++ forbids assignment of arrays"
 
à terme l'affectation doit etre automatique avec la lecture d'un fichier
 

Code :
  1. /*Definition de la structure produit*/
  2. struct cel_produit
  3. {int code;
  4. char nom[10];
  5. int quantitee;
  6. int prix;
  7. struct cel_produit *suivant;
  8. };
  9. void remplir_stock_fichier (struct cel_produit *liste,char *fichier)
  10. {
  11.     FILE *stock;
  12.     stock=fopen(fichier,"r" );
  13.     if (stock==NULL)
  14.        printf("Fichier inexistant\n" );
  15.     struct cel_produit *liste2;
  16.     liste2=NULL;
  17.     while (!feof(stock))
  18.     {
  19.           liste=(struct cel_produit *)(malloc(sizeof(struct cel_produit)));
  20.           fscanf(stock,"%d",&(*liste).code);
  21.           fseek(stock,10L,SEEK_CUR);
  22.           fgets((*liste).nom,7,stock);
  23. /*          fscanf(stock,"%d",&(*liste).quantitee);*/
  24.           fscanf(stock,"%d",&(*liste).prix);
  25.           liste->suivant=liste2;
  26.           liste2=liste;
  27.     }
  28. }
  29. /*affiche_tableau_stock recoit en argument un tableau de produit et un entier m et affiche les m premieres cases du tableau de produit*/
  30. void affiche_liste_stock (struct cel_produit *liste)
  31. {
  32.     /*struct cel_produit *liste2;*/
  33.     printf("on a en stock:\n" );
  34.     /*liste2=liste;*/
  35.     do
  36.         {
  37.          printf("%d bouteilles de \navec comme code %d et prix %d\n\n",liste->quantitee,liste->code,liste->prix);
  38.          /*printf("%d bouteilles \n",(*liste).quantitee);*/
  39.          liste=liste->suivant;
  40.         }while (liste!=NULL);
  41. }
  42. /*fonction main, pas d'arguments*/
  43. main()
  44. {
  45.     struct cel_produit *listeprod;
  46.     listeprod=(struct cel_produit *)(malloc(sizeof(struct cel_produit)));
  47.     listeprod->code=1;
  48.     listeprod->quantitee=2;
  49.     listeprod->nom="ensearien";
  50.     listeprod->prix=3;
  51.     listeprod->suivant=NULL;
  52. /*    remplir_stock_fichier(listeprod,"stock.txt" );*/
  53.     affiche_liste_stock(listeprod);
  54. }


 
 
Merci à tous ceux qui prendront le temps de m'aider

mood
Publicité
Posté le 28-02-2007 à 12:59:49  profilanswer
 

n°1521663
frodon131
Mon précieux
Posté le 28-02-2007 à 13:53:11  profilanswer
 

up :bounce:

n°1521671
Dumbledore
Posté le 28-02-2007 à 14:06:03  profilanswer
 

Tout simplement parce qu'on assigne pas une chaine de caractère comme ça en C (ton code est écrit en C et non en C++, d'ailleurs, même en C++ ça ne marcherait pas)
 
- char nom[10];
+ char *nom;
 
- fgets((*liste).nom,7,stock);
+ liste->nom = malloc(8*sizeof(char))
+ fgets(liste->nom,7,stock);
 
- listeprod->nom="ensearien";
+ listeprod->nom=strdup("ensearien" );

n°1521690
frodon131
Mon précieux
Posté le 28-02-2007 à 14:20:51  profilanswer
 

merci
juste une precision
le compilateur ne reconnait pas la fonction "strdup"
faut-il ajouter une bibliotheque speciale?
et que fait cette fondtion, je la connais pas?

n°1521692
_darkalt3_
Proctopathe
Posté le 28-02-2007 à 14:21:30  profilanswer
 

man :o
google :o


---------------
Töp of the plöp
n°1521696
theshockwa​ve
I work at a firm named Koslow
Posté le 28-02-2007 à 14:24:06  profilanswer
 

std::string; std::list ....

n°1521701
_darkalt3_
Proctopathe
Posté le 28-02-2007 à 14:25:32  profilanswer
 

theshockwave a écrit :

std::string; std::list ....


en fait on est en C finalement :o


---------------
Töp of the plöp
n°1521706
theshockwa​ve
I work at a firm named Koslow
Posté le 28-02-2007 à 14:26:41  profilanswer
 

_darkalt3_ a écrit :

en fait on est en C finalement :o


 
dans ce cas, il va falloir aussi compiler en C ...
 

frodon131 a écrit :

Mais pour le nom que je rentre comme chaine de caractere, le compilateur veut pas.
"ISO C++ forbids assignment of arrays"


 

n°1521713
frodon131
Mon précieux
Posté le 28-02-2007 à 14:33:35  profilanswer
 

theshockwave a écrit :

dans ce cas, il va falloir aussi compiler en C ...


 
je sais pas trop la difference mais j'utilise dev c++ chez moi sur windows et mes fichiers sont en .c à mon école

n°1521716
frodon131
Mon précieux
Posté le 28-02-2007 à 14:35:24  profilanswer
 

La fonction strdup c'est bon j'ai reussi à la faire marcher et l'affichage est correct pour les données que je rentre une par une mais maintenant c'est lors de l'affichage de la liste genéré par la lecture du fichier que ca plante

mood
Publicité
Posté le 28-02-2007 à 14:35:24  profilanswer
 

n°1521735
Dumbledore
Posté le 28-02-2007 à 14:56:47  profilanswer
 

Je crois que tu la construis mal ta liste
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct cel_produit *remplir_stock_fichier (char *fichier){
  4.          struct cel_produit *liste = NULL;
  5.          while (!feof(stock)){
  6.                   // Ajout en tête de liste
  7.                   struct cel_produit *liste2 = malloc(sizeof(struct cel_produit)); // c'est pas bien de caster les malloc
  8.                   liste2->suivant = liste;
  9.                   liste = liste2;
  10.        
  11.                   // ici, tu remplie tes données
  12.                   /* ........... */
  13.          }
  14.          return liste;
  15. }
  16. void lire_liste(struct cel_produit *liste){
  17.      if(liste != null){
  18.             // mettre les printf ici pour une lecture depuis le début de la liste
  19.             lire_liste(liste->suivant);
  20.             // mettre les printf ici pour une lecture depuis la fin de la liste
  21.      }
  22. }
  23. int main(int argc, char **argv){
  24.      struct cel_produit *liste = remplir_stock_fichier ("/home/toto/fichier" );
  25.      lire_liste(liste);
  26.      return EXIT_SUCCESS;
  27. }


Message édité par Dumbledore le 28-02-2007 à 14:57:43

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

  [C/C++] Liste chainée et chaine de caractére

 

Sujets relatifs
comment créer un bouton avec liste déroulante ?confirmer la suppression de fichiers en chaîne
Etablir une liste de connectés actuelslecture d'une chaine de caractère
[HTML] Peut-on afficher une image dans une liste de choix ?[Réglé] Problème avec ma fonction d'encodage de chaine
Caractère à probleme... [Vbasic.Net]Chaine
Parcourir une liste de checkbox 
Plus de sujets relatifs à : [C/C++] Liste chainée et chaine de caractére


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