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

  FORUM HardWare.fr
  Programmation
  C

  Probleme : Tableau de pointeurs sur structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme : Tableau de pointeurs sur structure

n°2173752
kenzo751
Posté le 01-02-2013 à 12:36:37  profilanswer
 

Bonjour, voila mon problème :
j'ai comme outil un fichier texte contenant des livres sous la forme:
-un numero
-un titre
-un auteur
 
Une structure livre est donc créer comme ceci :  
 

Code :
  1. typedef struct livre{
  2. char *titre;
  3. char *auteur;
  4. int num;
  5. }Livre;


 
On m a donc demander de creer une fonction utilisant un tableau de pointeurs sur struc et permettant de lire n lignes du fichier pour les stockées dans la structure de données.
Des fonctions de lecture de texte m'ont été données pour lire les données du texte.
J'ai donc procédé ainsi :
 

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<string.h>
  5. #include "entree_sortie.h"
  6. #define TAILLEMAX 32
  7. #define TMAX 1024
  8. typedef struct livre{
  9. char *titre;
  10. char *auteur;
  11. int num;
  12. }Livre;
  13. void affiche(int n, char* nomfichier){
  14. FILE  *f= fopen(nomfichier,"r" );
  15. if(f==NULL){
  16.  fprintf(stderr,"ERREUR_OUVERTURE_FICHIER" );
  17.  exit(1);
  18. }
  19. char Titre[TAILLEMAX];
  20. char Auteur[TAILLEMAX];
  21. int j,k;
  22. Livre** Tab=(Livre **)malloc(sizeof(Livre *)*TMAX);
  23. if(Tab==NULL){
  24.  fprintf(stderr,"ERREUR_ALLOCTAB" );
  25.  exit(1);
  26. }
  27. for(j=0;j<TMAX;j++){
  28.  Tab[j]=NULL;
  29. }
  30. int ligne=0;
  31. while(ligne<n){
  32.  int entier;
  33.  entier= GetEntier(f);
  34.  Skip(f);
  35.   GetChaine(f,TAILLEMAX,Auteur);
  36.   Skip(f);
  37.   GetChaine(f,TAILLEMAX,Titre);
  38.   SkipLine(f);
  39.   Tab[ligne]=(Livre *)malloc(sizeof(Livre));
  40.   if(Tab[ligne]==NULL){
  41.    fprintf(stderr,"ERREUR_ALLOCTABLIGNE" );
  42.    exit(1);
  43.   }
  44.   Tab[ligne]->titre=strdup(Titre);
  45.   printf("%s ",Tab[ligne]->titre);
  46.   Tab[ligne]->auteur=strdup(Auteur);
  47.   printf("%s ",Tab[ligne]->auteur);
  48.   Tab[ligne]->num=GetEntier(f);
  49.   printf("%d\n",Tab[ligne]->num);
  50.   ligne++;
  51. }
  52. fclose(f);
  53. }
  54. int main(){
  55. affiche(19,"GdeBiblio.txt" );
  56. return 0;
  57. }


 
 
Ce code compile et m'affiche les 19 entrées du fichier, cependant je dois maintenant creer une fonction qui recherche en fonction du numéro, apres plusieurs essai je ne trouve pas le bon protoype de fonction.
Merci de votre aide

mood
Publicité
Posté le 01-02-2013 à 12:36:37  profilanswer
 

n°2173799
Profil sup​primé
Posté le 01-02-2013 à 16:46:07  answer
 

Moi j'y connais pas grand grand chose, je te répond juste rapidement.
 
T'aurait pas besoin de calculer les adresses des élément du tableau ?

Si non une truc du genre
 
livre ieme(int i);
 
 
Si tu veux passer le tableau  
 
plutôt je pense. d'après ce que tu as écrit.
 
livre ieme(int i,livre ** tab);
 
 
Je sis con.  :o


Message édité par Profil supprimé le 01-02-2013 à 16:47:28
n°2173801
gelatine_v​elue
Posté le 01-02-2013 à 16:46:38  profilanswer
 

Un truc du style?
 

Code :
  1. Livre * getLivre (int num)
  2. {
  3. return Tab[num];
  4. }

n°2173909
champions
sélibataire
Posté le 03-02-2013 à 01:04:50  profilanswer
 

ecrire un programme qui permet d'entré une chaine de caractère et dire si celle si est un palyndrome ou pas


---------------
yvo
n°2173912
Farian
Posté le 03-02-2013 à 11:00:55  profilanswer
 

champions a écrit :

ecrire un programme qui permet d'entré une chaine de caractère et dire si celle si est un palyndrome ou pas


 
Joly post, qui fait ci bien avancé le schmylblyck !  [:moundir]  
 
Si avec ça le problème initial n'est pas résolu ...
 

Code :
  1. Livre * getLivre (int num)
  2. {
  3.     return Tab[num];
  4. }


Plus sérieusement, et sans fautes (enfin, j'espère ...), la solution proposée ci-dessus suppose que le num en question est l'indice dans le tableau et pas le champ "num" de la structure (cote du livre ?), ce qui me paraît incorrect.
Je vous propose plutôt de garder le prototypage proposé et de boucler sur le tableau de pointeurs tant que : la valeur de l'élément n'est pas NULL (cela signifierait que l'on n'a pas trouvé le numéro recherché -> on renvoie NULL) ou que l'on atteigne le nombre maximum d'éléments du tableau (même cause et même conséquences) ou que le champ "num" de l'élément vaille la valeur passée en paramètre -> on renvoie le pointeur.
 
PS : Dans votre fonction "affiche", vous devriez tester que le paramètre n est bien inférieur à TMAX (ce serait dommage de planter pour si peu :) ). Par ailleurs, vous testez le retour de "malloc" (ce qui est tout à votre honneur !), mais pas celui de "strdup", ce qui n'est pas très cohérent.
 

n°2173913
gelatine_v​elue
Posté le 03-02-2013 à 11:05:04  profilanswer
 

champions a écrit :

ecrire un programme qui permet d'entré une chaine de caractère et dire si celle si est un palyndrome ou pas


 
Il y a des milliers de solutions deja codees si tu te donnes la peine de faire une recherche google. T'es _un peu_ un boulet sur ce coup la.

n°2173914
Farian
Posté le 03-02-2013 à 11:28:59  profilanswer
 

Je ne peux qu'être d'accord, si on rajoute le piratage de post, cela fait vraiment boulet :(

n°2173915
champions
sélibataire
Posté le 03-02-2013 à 11:34:55  profilanswer
 

j'ai pas compri?
 

n°2173916
Farian
Posté le 03-02-2013 à 11:49:11  profilanswer
 

Étant de bonne humeur en ce beau dimanche ensoleillé, je vais préciser :  
 
Comme indiqué dans les règles de ce forum, il faut d'abord rechercher par soi-même (et dans le cas indiqué, ce ne sont pas les solutions qui manquent sur Google ...) et une bonne règle de savoir-vivre est de créer son propre post, au lieu de s'incruster au beau milieu d'une discussion.
 
Avez-vous l'impression d'avoir respecté ces règles élémentaires ?
 
En cadeau Bonux, je vous invite à lire la partie des règles concernant l'orthographe ...


Message édité par Farian le 03-02-2013 à 11:50:02

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

  Probleme : Tableau de pointeurs sur structure

 

Sujets relatifs
[RESOLU] Problème de version de PHP (ou ZEND) ?Problème bandeau joomla
Probleme ERREUR PDOExercice java débutant Trie tableau
Problème génération labyrintheProblème entre Doctype et un script
[VBS] Script Language problème aide svpproblème CSS externe pour facebook box
couleur tableau fct result valeur colonne csvProblème avec oracle express edition
Plus de sujets relatifs à : Probleme : Tableau de pointeurs sur structure


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