Bonsoir à tous
Voici mon petit problème : j'essaye d'écrire un programme qui (en gros) lit un fichier écrit dans un format particulier.
Un exemple de fichier à lire serait :
3
100 20
50 70
60 30
2
90 60
30 40
Le premier chiffre de chaque groupe correspond au nombre de couple à stocker dans un tableau ensuite.
Je veut donc lire la première ligne, créer un tableau dynamique de N lignes et 2 colonnes, remplir le tableau, faire une opération dessus, libérer l'espace mémoire et recommencer jusqu'à atteindre la fin de mon fichier.
Mon problème se situe au niveau de la condition d'arrêt : après avoir libérer mon tableau, je test si le caractère suivant correspond à la fin de fichier, si non, je repars pour un tour, si oui j'arrête. Mais mon test rate toujours et me rend un nombre au lieu d'un EOF ou alors il le fait mais un tour trop tard ...
voici mon bout de code :
Et j'obtiens avec l'exemple noté plus haut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 int lecture_fichier2(char* fic){ int nbPoint=0; int nbLignes = 0; int ** tab; int i,j; int carAct =0; FILE* f=fopen(fic,"r"); if(f!= NULL){ do{ fscanf(f,"%d",&nbPoint); printf("Nombre de points suivant : %d\n",nbPoint); nbLignes++; tab=(int **)malloc(sizeof(int*)*nbPoint); for(i=0;i<nbPoint;i++) tab[i]=(int *)malloc(sizeof(int)*2); for(i=0;i<nbPoint;i++){ fscanf(f,"%d %d",&tab[i][0],&tab[i][1]); printf("%d\t%d\n",tab[i][0],tab[i][1]); nbLignes++; } /*Opération sur le tableau ... */ for(i=0;i<nbPoint;i++){ free(tab[i]); } free(tab); carAct=fgetc(f); } while((carAct!=EOF) && (nbLignes<50)); } else{ printf("Erreur d'ouverture\n"); return 0; } fclose(f); return 0; }
Nombre de points suivant : 3
100 20
50 70
60 30
Nombre de points suivant : 2
90 60
30 40
Nombre de points suivant : 2
155144600 40
155144568 60
J'ai beau regarder, je ne vois pas où est mon erreur ...
Je travail sous Ubuntu 8.
Merci d'avance pour vos réponses ou suggestions
Bonne fin de soirée à tous
Partager