Bonjour,
Je suis un peu perdu lors de la lecture d'un fichier texte. J'ai réussi à lire les deux premiers bloques et il me reste la suite (se sont des matrices).
Voici le contenu du fichier :
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
5 10 25 15 480 
 
9
10
10
8
10
 
141 200
120 660
283 319
536 582
120 660
224 254
120 660
120 660
120 660
451 525
 
1	9	2	4	7	6	3	0	5       	
9	4	8	2	1	7	5	3	9       6
3	2	9	7	4	1	5	0	8	6	
1	7	8	4	5	9	2	6		
0	1	3	5	4	7	2	9	8	6
 
19	25	17	24	25	27	16	30	14	22	
16	11	25	19	18	22	24	23	12	10	
17	20	16	21	21	22	23	27	11	7	
20	16	19	21	19	13	29	22	24	10	
18	23	23	30	17	21	24	30	18	19	
11	18	20	15	20	16	27	9	25	17	
18	20	19	22	17	22	32	20	22	14	
8	17	25	19	17	7	24	16	19	15	
13	18	23	14	21	23	12	16	23	12	
23	16	21	32	21	34	21	36	22	22	
 
19	25	17	24	25	27	16	30	14	22	
16	11	25	19	18	22	24	23	12	10	
17	20	16	21	21	22	23	27	11	7	
20	16	19	21	19	13	29	22	24	10	
18	23	23	30	17	21	24	30	18	19	
11	18	20	15	20	16	27	9	25	17	
18	20	19	22	17	22	32	20	22	14	
8	17	25	19	17	7	24	16	19	15	
13	18	23	14	21	23	12	16	23	12	
23	16	21	32	21	34	21	36	22	22
La première matrice
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
1	9	2	4	7	6	3	0	5       	
9	4	8	2	1	7	5	3	9       6
3	2	9	7	4	1	5	0	8	6	
1	7	8	4	5	9	2	6		
0	1	3	5	4	7	2	9	8	6
est constitué de 5 lignes mais le nombre de colonnes est en rapport avec ça
Les deux autres matrices ont la même taille (10*10) (bien sur je les ai initialisé d'une manière dynamique).

Je sollicite votre aide pour m'en sortir de ce beug.
ci-dessous le code complet :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
 
 
#include<stdio.h>   //Fonctions d'entrées/sorties
#include<stdlib.h>  //Librairies standards du langage C
#include <math.h>   //Fonctions mathématiques
#include <time.h>   //Fonctions date/heure
#include <string.h> //Fonctions chaînes de caractères
 
#define MAX 500
 
 
                                            /**************************************
                                                     Structures de donnes
                                                     **************************************/
 
typedef struct infirmier 
{
   int ni;												 /*nombre d'infirmier*/
   int lieu_depart;									     /*lieu de depart de l'infirmier*/	
   int lieu_arrive;										 /*lieu d'arrive de l'infirmier*/	
   int pause_dej;										 /*pause déjeurner*/
   int temps_service;                                    /*temps de service de l'infirmier i*/
   int borne_inf_tw;                                     /*début de la fenetre du temps de l'infirmier i*/
   int borne_sup_tw;                                     /*fin de la fenetre du temps de l'infirmier i*/
}infirmier;
 
typedef struct donnee 
{
    int ni;												 /* nombre d'infirmiers */
    int nt;												 /* nombre de taches */
	int nbr_sommets;								     /* nombre de sommets visitables */
	int temps_att_max;									 /* temps d'attentes maxi*/
	int duree_max;										 /* duree maximale de la tournee */
 
 
}donnee;
 
 
typedef struct sommet 
{
   int temps_service;                                    /*temps de service de chaque sommet */
   int borne_inf_tw;                                     /*début de la fenetre du temps du sommet i */
   int borne_sup_tw;                                     /*fin de la fenetre du temps du sommet i */
   int *nbr_taches;										 /*nombre de taches pouvant etre effectuees par l'infimier*/
   int *ens_sommets;								     /*ensemble de sommets pouvan etre effectuees par l'infimier*/
   int **temps_depl;									 /*temps de deplacement entre les sommets*/
   int **cout_depl;										 /*cout de deplacement entre les sommets*/
 
}sommet;
 
 
 
 
												 /**************************************
                                                          Chargement des données
                                                          **************************************/
 
 
 
 
void ChargeDonnees(donnee *data, infirmier *nursing, sommet *som)
{
   int i,l,j,n;
 
   FILE *fp;
 
    /*tester l'ouverture du fichier*/
	fp = fopen("data.txt", "r");
	if(fp == NULL)
	{
		printf("Impossible d'ouvrir fichier donnee.txt \n");
		exit (-1);
	}
 
	/* lecture des donnes : nombre d'infirmiers, nombre de sommets, nombres de sommets visitables, temps d'attente maxi e duree maxi de la tournee*/
	fscanf(fp,"%d %d %d %d %d \n",&data->ni,&data->nt,&data->nbr_sommets,&data->temps_att_max,&data->duree_max);
    printf("%d	%d	%d	%d	%d \n",data->ni,data->nt,data->nbr_sommets,data->temps_att_max,data->duree_max);
 
	/*nombre de taches effectuees par l'infirmier*/
	printf("\n ** Affcihage du nombre de taches effectuees par l'infirmier ** \n\n");
 
	for(i=0;i<data->ni;i++)
   {
	   fscanf(fp,"%d \n",&som->nbr_taches[i]);
       printf("%d  \n",som->nbr_taches[i]);
       }
	 printf("\n ****** FIN d'Affcihage ****** \n");
 
	/*les fenetres de temps*/
	printf("\n ** Affcihage des fenetres de temps ** \n\n");
 
	for(i=0;i<data->nt;i++)
       {
		   fscanf(fp,"%d %d \n",&som[i].borne_inf_tw, &som[i].borne_sup_tw);
		   printf("%d %d\n",som[i].borne_inf_tw, som[i].borne_sup_tw);
		   }
	 printf("\n ****** FIN d'Affcihage ****** \n");
 
	/*ensemble de taches pouvant etres effectuees par l'infirmier*/
	printf("\n ** Affcihage de l'ensemble de taches pouvant etres effectuees par l'infirmier ** \n\n");
 
	for (i=0; i<data->ni;i++)
		{
			for (j=0; j<som->nbr_taches[i];j++)
			{
				fscanf(fp,"%d \n",&som->ens_sommets[j]);
				printf("%d \t",som->ens_sommets[j]);
	        }
			printf ("\n");
	}
	 printf("\n ****** FIN d'Affcihage ****** \n");
 
	/*matrice des temps de deplacement entre les sommets*/
	printf("\n ** Affcihage de la matrice des temps de deplacement entre les sommets ** \n\n");
 
	for (i=1; i<= data->nt;i++)
		{
			for (j=1; j<= data->nt;j++)
		    {
				fscanf(fp,"%d \n",&som->temps_depl[i][j]);
				printf("%d  \t",som->temps_depl[i][j]);
	        }
			printf ("\n");
	}
	printf("\n ****** FIN d'Affcihage ****** \n");
 
	///*matrice des couts entre les sommets*/
	// printf("\n ** Affcihage de la matrice des couts entre les sommets ** \n\n");
 
	for (i=1; i<= data->nt;i++)
		{
			for (j=1; j<= data->nt;j++)
		    {
				fscanf(fp,"%d \n",&som->cout_depl[i][j]);
				printf("%d  \t",som->cout_depl[i][j]);
	        }
			printf ("\n");
	}
	//printf("\n ****** FIN d'Affcihage ****** \n");
 
	//printf("temps de deplacemen entre la tache %d ",som->temps_depl[1]);
   fclose (fp);
 
}
 
	// programme principal //
 
int main (void)
{
	 int ni, nt, v, w, l;
	 int nbr_inf;
	 int nbr_task;
	 int nbr_s;
	 FILE *fp;
 
	 infirmier *nursing=NULL;
	 donnee *data=NULL;
	 sommet *som=NULL;
 
 
	fp = fopen("data.txt","r");
	  if (fp == NULL)
	  { 
		  printf("\nErreur a l'ouverture du fichier.\n\a");
	      exit(0); 
	  }
 
	fscanf(fp,"%d\n",&nbr_inf);
	fscanf(fp,"%d\n",&nbr_s);
 
 
	fclose(fp);
 
	nursing = (infirmier *) calloc ((unsigned)nbr_inf+1, (unsigned)(sizeof(infirmier )) );
	if ( nursing == NULL )
	{
	  printf("Not enough space for nursing\n");
	  exit(1);
	}
 
	som = (sommet *) calloc ((unsigned)nbr_s+1, (unsigned)(sizeof(sommet )) );
	if ( som == NULL )
	{
	  printf("Not enough space for som\n");
	  exit(1);
	}
 
	data = (donnee *) calloc ((unsigned)1, (unsigned)(sizeof(donnee )) );
	if ( data == NULL )
	{
	  printf("Not enough space for data\n");
	  exit(1);
	}
 
	som->nbr_taches = (int *) calloc((((nbr_s)+1)),sizeof(int));
		if (som->nbr_taches == NULL)
    		{ 
                printf("Memoire insuffisante pour som->nbr_taches!");
    			exit(0); 
            }
 
	som->ens_sommets = (int *) calloc((((nbr_s)+1)),sizeof(int));
	if (som->ens_sommets == NULL)
    	{ 
            printf("Memoire insuffisante pour som->ens_sommets!");
    		exit(0); 
        }
 
	som->temps_depl = (int **) calloc(data->nt,sizeof(int*)); // allocation de la memoire
	if (som->temps_depl == NULL)
    	{ 
            printf("Memoire insuffisante pour som->temps_depl!");
    		exit(0); 
        }
 
	som->cout_depl = (int **) calloc((((nbr_s)+1)),sizeof(int * )); // allocation de la memoire
	if (som->cout_depl == NULL)
    	{ 
            printf("Memoire insuffisante pour som->cout_depl!");
    		exit(0); 
        }
 
 
 
 
	ChargeDonnees(data,nursing,som);
 
 
 
 
	getchar();
   return EXIT_SUCCESS;
}
Merci d'avance pour votre aide.