marooh | 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 :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct a_arbre
- {
- int code;
- char designation[15];
- char code_famille[5];
- char prix_achat[10];
- char code_fournisseur[5];
- char quantite_stock[5];
- struct a_arbre * gauche;
- struct a_arbre * droit;
- };
- typedef struct a_arbre ar_arbre;
- void ouvrir(FILE **fp);
- void insertion(ar_arbre** noeud,int v,char s[],char f[]);
- void view(ar_arbre *racine);
- void charger(ar_arbre** noeud,char f[],char s[]);
- int main()
- {FILE *fp;
- char s[100];
- char f[100];
- int v;
- ar_arbre *noeud;
- ouvrir(&fp);
- while(fgets(f,100,fp))
- {insertion(&(noeud),v,s,f);
- }
- fclose(fp);
- view(noeud);
- system("pause" );
- return(0);
- }
- void ouvrir(FILE **fp)
- {
- if(!(*fp=fopen("test.txt","r" )))
- {
- printf("le fichier est inexistant" );
- exit(0);
- }
- else printf("ouverture du fichier... \n" );
- }
- void insertion(ar_arbre** noeud, int v,char s[],char f[])
- {
- if (*noeud==NULL) /* si le noeud n’existe pas, on le cr´ee */
- {
- *noeud=(ar_arbre*) malloc(sizeof(ar_arbre));
- charger((noeud),f,s);
- (*noeud)->gauche=NULL;
- (*noeud)->droit=NULL;
- }
- else
- {
- if (v>(*noeud)->code)
- insertion(&(*noeud)->droit,v,f,s); /* aller a droite */
- else
- insertion(&(*noeud)->gauche,v,f,s); /* aller a gauche */
- }
- }
- void view(ar_arbre *racine)
- {if (racine)
- view(racine->gauche);
- printf("%d\n",racine->code);
- view(racine->droit);
- }
- void charger(ar_arbre** noeud,char f[],char s[])
- {int v;
- strncpy(s,f,5);
- sscanf(s,"%5d",&v);
- (*noeud)->code=v;
- strncpy(s,f+6,15);
- strncpy((*noeud)->designation,s,strlen(s)+1);
- strncpy(s,f+21,5);
- strncpy((*noeud)->code_famille,s,strlen(s)+1);
- strncpy(s,f+26,10);
- strncpy((*noeud)->prix_achat,s,strlen(s)+1);
- strncpy(s,f+36,5);
- strncpy((*noeud)->code_fournisseur,s,strlen(s)+1);
- strncpy(s,f+41,5);
- strncpy((*noeud)->quantite_stock,s,strlen(s)+1);
- }
|
|