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

  FORUM HardWare.fr
  Programmation
  C

  chargement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

chargement

n°2075141
marooh
Posté le 10-05-2011 à 21:46:00  profilanswer
 

bonjour,
j'essais de charger à partir d'un fichier de données un arbre,j'ai utilisé une fonction récursive mais ça ne marche pas et j'ignore vraiment la reson si vous pouvez verifier avec moi, merci :)  
voici mon code

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct a_arbre
  5. {
  6. int code;
  7. char designation[15];
  8. char code_famille[5];
  9. char prix_achat[10];
  10. char code_fournisseur[5];
  11. char quantite_stock[5];
  12. struct a_arbre * gauche;
  13. struct a_arbre * droit;
  14. };
  15. typedef struct a_arbre ar_arbre;
  16. void ouvrir(FILE **fp);
  17. void insertion(ar_arbre** noeud,int v,char s[],char f[]);
  18. void view(ar_arbre *racine);
  19. void charger(ar_arbre** noeud,char f[],char s[]);
  20. int main()
  21. {FILE *fp;
  22.     char s[100];
  23.     char f[100];
  24.     int v;
  25.     ar_arbre *noeud;
  26.    ouvrir(&fp);
  27.    while(fgets(f,100,fp))
  28.    {insertion(&(noeud),v,s,f);
  29. }
  30. fclose(fp);
  31. view(noeud);
  32. system("pause" );
  33. return(0);
  34. }
  35. void ouvrir(FILE **fp)
  36. {
  37. if(!(*fp=fopen("test.txt","r" )))
  38. {
  39. printf("le fichier est inexistant" );
  40. exit(0);
  41. }
  42. else printf("ouverture du fichier... \n" );
  43. }
  44. void insertion(ar_arbre** noeud, int v,char s[],char f[])
  45. {
  46. if (*noeud==NULL) /* si le noeud n’existe pas, on le cr´ee */
  47. {
  48. *noeud=(ar_arbre*) malloc(sizeof(ar_arbre));
  49. charger((noeud),f,s);
  50. (*noeud)->gauche=NULL;
  51. (*noeud)->droit=NULL;
  52. }
  53. else
  54. {
  55. if (v>(*noeud)->code)
  56. insertion(&(*noeud)->droit,v,f,s); /* aller a droite */
  57. else
  58. insertion(&(*noeud)->gauche,v,f,s); /* aller a gauche */
  59. }
  60. }
  61. void view(ar_arbre *racine)
  62. {if (racine)
  63. view(racine->gauche);
  64. printf("%d\n",racine->code);
  65. view(racine->droit);
  66. }
  67. void charger(ar_arbre** noeud,char f[],char s[])
  68. {int v;
  69.     strncpy(s,f,5);
  70. sscanf(s,"%5d",&v);
  71. (*noeud)->code=v;
  72. strncpy(s,f+6,15);
  73. strncpy((*noeud)->designation,s,strlen(s)+1);
  74. strncpy(s,f+21,5);
  75. strncpy((*noeud)->code_famille,s,strlen(s)+1);
  76. strncpy(s,f+26,10);
  77. strncpy((*noeud)->prix_achat,s,strlen(s)+1);
  78. strncpy(s,f+36,5);
  79. strncpy((*noeud)->code_fournisseur,s,strlen(s)+1);
  80. strncpy(s,f+41,5);
  81. strncpy((*noeud)->quantite_stock,s,strlen(s)+1);
  82. }

mood
Publicité
Posté le 10-05-2011 à 21:46:00  profilanswer
 

n°2075144
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 22:18:14  profilanswer
 

Citation :

void view(ar_arbre *racine)
{
    if (racine)
         view(racine->gauche);
    printf("%d\n",racine->code);
    view(racine->droit);
}


ça m'a l'air plantogène, ça.
C'est pas:
void view(ar_arbre *racine)
{
    if (racine) {
        view(racine->gauche);
        printf("%d\n",racine->code);
        view(racine->droit);
    }
}
que tu voulais faire?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2075149
tpierron
Posté le 10-05-2011 à 22:42:01  profilanswer
 


Hmm, tu devrais aussi commencer par initialiser proprement tes variables locales dans main(), ça évitera que ça te pête à la figure dans insertion().
 

n°2075150
marooh
Posté le 10-05-2011 à 22:44:39  profilanswer
 

oui mais ce n'est pas ça la faute,ça se bloque toujours

n°2075151
marooh
Posté le 10-05-2011 à 22:45:59  profilanswer
 

@tpierron: comment ça mieux initialiser mes variables??

n°2075155
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 23:18:31  profilanswer
 

Ben relis ton code, en particulier ce qui risque de se passer au premier appel de insertion, dans le main, si une certaine initialisation n'est pas effectuée...
De toute façon, plus je relis l'algo, moins je vois de raison pour qu'il marche, vu qu'a aucun moment, v (pas initialisé) ne change de valeur dans le insertion(&(noeud),v,s,f) de la boucle de lecture.
A+,


Message édité par gilou le 10-05-2011 à 23:31:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2075160
marooh
Posté le 10-05-2011 à 23:25:06  profilanswer
 

de l'aide serai la bienvenue....

n°2075162
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 23:40:24  profilanswer
 

Le premier appel de insertion(&(noeud),v,s,f)
noeud est pas initialisé, donc il n'y a aucune raison que *noeud vaille nul et que ton premier test, if (*noeud==NULL) fonctionne
d'autre part, tu appelles systématiquement insertion dans la boucle avec l'entier v qui n'est pas initialisé (et ne changera pas de valeur, car passage par valeur de v) donc le test if (v>(*noeud)->code) est fait avec une valeur de v constante (et sans doute incohérente).
 
Donc à toi de rectifier cela.
comme il n'y a pas de commentaire expliquant le role de v, je n'ai pas de boule de cristal pour deviner son role exact.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2075202
marooh
Posté le 11-05-2011 à 10:13:10  profilanswer
 

bonjour,
j'ai trouvé la solution,ce n'était pas une question d'initialisation mais de positionnement dans le fichier.En tt cas je vous remercie pour votre aide :)


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

  chargement

 

Sujets relatifs
Chargement des dépendancesChargement des styles Windows XP OK, mais polices moches
Chargement d'un script sur site dynamiquePb chargement de ToolTips sur ListView
[CSS] Texte qui centre après chargementAS3 = probleme indicateur chargement d'images multiple
Chargement des scripts avec Jquery 1.4.2Cocher des checkBox au chargement d'un treeview (vba)
Chargement d'un fichier .emx en JAVA sous EclipseProbleme de chargement du ViewState avec Update Panel Ajax.
Plus de sujets relatifs à : chargement


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