Bonjour à tous!
Voila mon problème:
je cherche à récupérer, depuis un fichier, des données (entiers) que je veux placer dans une structure "voisinage"; le système fonctionne suivant une chaine de "voisinage", chaque "voisinage" comportant un pointeur de "voisinage" indiquant le "voisinage" suivant... (voir programme ci-après).
Voici la tête de mon fichier de données (appelé dans mon programme "Fvsng.txt" pour "famille de voisinage"):
1
1 0 0 1 1 0 0 0 0
1 1 1 1 1 1 1 1 1
Le premier entier sera affecté au champ "ordre" de la structure "voisinage". Puis, chaque ligne correspond au tableau d'entier v de la structure "voisinage".
Par exemple ici, j'aurai un ordre de 1 pour le 1° voisinage, la première ligne correspond au champ v du 1° voisinage, puis pointeur sur NULL; je rattache le tout à un 2° voisinage, ordre égal à 1, la deuxième ligne affectée au champ v du 2° voisinage, puis pointeur sur le 1° voisinage.
Voici mon programme:
#include <stdio.h>
#include <stdlib.h>
typedef struct voisinage {
int ordre;
int *v;
struct voisinage *suiv;
}voisinage;
voisinage vois;
int CreerFVoisinage(char *nom,voisinage *vsng)
{ int o,i;
voisinage *p;
FILE *f;
vsng=(voisinage *) malloc(sizeof(voisinage));
vsng=NULL;
/* Ouverture du fichier */
f = fopen (nom, "r");
if (f == NULL)
{
printf ("ERREUR fopen(%s)\n", nom);
return -1;
}
fscanf(f,"%d",&o);
while (!feof(f))
{
p=(voisinage *) malloc(sizeof(voisinage));
p->v=(int *) malloc(sizeof(int)*(2*o+1)*(2*o+1));
p->ordre=o;
for(i=0;i<(2*o+1)*(2*o+1);i++)
fscanf(f,"%d ",&(p->v[i]));
p->suiv=vsng;
vsng=p;
}
fclose(f);
return 0;
}
void afficheVoisinage(voisinage *vsng)
{
int i;
voisinage *p;
p=vsng;
while (p!=NULL)
{ printf("--------------------\n");
for(i=0;i<(2*p->ordre+1)*(2*p->ordre+1);i++)
printf("%d\n",p->v[i]);
p=p->suiv;
}
}
int main(int argc,char **argv)
{
CreerFVoisinage("Fvsng.txt",&vois);
afficheVoisinage(&vois);
return 0;
}
Ce qui est curieux, c'est que si je demande entre le fclose(f); et le return 0; de la fonction CreerFVoisinage la visualisation des données de ma chaine de "voisinage", tout semble avoir été affecté correctement, alors qu'à l'extérieur (dans le main avec la fonction afficheVoisinage) rien ne semble avoir été "mémorisé"...
Voila,
j'espère avoir été clair :-)
J'ajouterai que la compilation ne retourne aucune erreur ni aucun "warning" :-)
Je remercie d'avance tout ceux qui pourront m'aider sur ce petit problème de langage C, en tout cas tout ceux qui auront pris le temps de lire ce sujet jusqu'à la fin.
Cordialement,
Bastien.

