Salut à tous!

J'ai réalisé un programme qui me permet d'ouvrir un fichier .txt d'en extraire des données et de les placer dans un tableau multidimensionnels.

Mais comme vous pouvez l'imaginer, mon programme ne fonctionne pas, je n'ai pas d'erreur de compilation mais le résultat est complètement faux.
Je pense m'être trompé dans la déclaration de mon tableau et sûrement dans mes boucles. Je me suis également bien compliqué la vie dans l'écriture dans un fichier à la fin du programme.

Je ne pense pas que le programme soit très compliqué mais je m'y perd un peu pour être tout à fait franc .

Je me suis renseigné sur l'allocation dynamique et la fonction malloc mais j'avoue ne pas avoir bien compris le principe.

Si des personnes ont des idées pour le faire fonctionner correctement, je suis preneur , merci

Voici le programme :
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
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>
 
int main(int argc, char *argv[])
{
    //Delcarations des pointeurs de type FILE pour les fichier 1, 2, 3 et 4
    FILE* fichier1 = NULL; 
    FILE* fichier2 = NULL; 
 
    //Declaration de la chaine de craractères correspondant au nom du fichier1  
    char nom_fichier[100];
 
    //Declaration des entiers i (pour les tableaux) et de NUMBLOC pour le numéro de chaque bloc
    int i = 0,
        j = 0,
        k = 4,
        n = 2048,
    NUMBLOC = 1,
    NumBloc[5000];
 
    /*Declarations des variables recuperant les valeurs maximales et minimales de chaque voie 
      et des sommes permettant le calcul des valeurs RMS*/     
    float MAX = 0,          
          MIN = 0,          
          SOMME = 0;
 
    //Declarations des valeurs RMS
    double RMS = 0;
 
    printf("Saisir le nom du fichier a ouvrir\n\n");    
 
    // Saisie du nom du fichier au clavier 
    scanf("%s",nom_fichier);   
 
    //Declarations des tableaux recuperant les valeurs du temps, de la voie 1 Jusqu'à la voie 15
    float tab[n][k],
          max[10000][k],
          min[10000][k],
          somme[10000][k],
          rms[10000][k];
 
    //fonction ouvrir avec mode d'ouverture "r" (lecture seulement)      
    fichier1 = fopen(nom_fichier, "r");
 
    //si il n'y a pas de lecture de fichier ou que la lecture est finie, on renvoie NULL      
    if (fichier1 == NULL) 
    {
                 //On affiche un message d'erreur si le fichier demandé n'existe pas
                 printf("Erreur lors de l'ouverture du fichier\n");
    }
    else 
    {   
 
    //Boucle qui s'execute tant que la fin du fichier n'est pas detectée (eof = End Of File)
    while(!feof(fichier1))
    {           
 
            //On définit le numéro du bloc
            NumBloc[i] = NUMBLOC;
 
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < k; j++)
                {
            // Récupération des valeurs contenues dans le fichier et stockage de ces dernières dans le tableau
            fscanf(fichier1, "%f", &tab[i][j]);
                }            
            }
 
            //Boucle qui Determine les valeurs maximales de chaque voie et les recupere dans des variables           
            for (j = 1; j < k; j++)
            {
                 for (i = 0; i < n; i++)
                 {               
                        if(tab[i][j] > MAX)                                         
                        MAX = tab[i][j];               
 
                 }
                 max[i][j] = MAX;
                 i++;
            }
 
      i = 0;
 
      //Boucle qui determine les valeurs minimales pour chaque voie et les recupere dans des variables
      for (j = 1; j < k; j++)
            {
                 for (i = 0; i < n; i++)
                 {               
                        if(tab[i][j] > MIN)                                         
                        MIN = tab[i][j];               
 
                 }
                 min[i][j] = MIN;
                 i++;
            }
 
      i = 0;          
 
      //Boucle qui determine la somme des termes au carré d'un bloc           
      for (j = 1; j < k; j++)
            {
                 for (i = 0; i < n; i++)
                 {               
                         SOMME = SOMME + (tab[i][j]*tab[i][j]);
                 }
                 somme[i][j] = SOMME;
                 i++;                                                 
        }
 
      i = 0;    
 
      //Calcul des valeurs RMS
      for (j = 1; j < k; j++)
            {
                  RMS = (sqrt(somme[i][j])/n);
                  rms[i][j] = RMS;
                  i++;   
 
            }
 
      i = 0;      
 
    //Ouvre le fichier "RMS.txt" en mode a+ (ajout). Si le fichier n'existe pas, il est créé 
    fichier2 = fopen("DONNEES.txt","a+"); 
 
    if (fichier2 != NULL)
    {          
            //Ecriture des données dans le fichier DONNEES.txt
            for (i = 0; i < n; i++)
                 {               
                    fprintf(fichier2,"%d %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f \n", NumBloc[i], max[i][1], min[i][1], rms[i][1], max[i][2], min[i][2], rms[i][2], max[i][3], min[i][3], rms[i][3], max[i][4], min[i][4], rms[i][4], max[i][5], min[i][5], rms[i][5], max[i][6], min[i][6], rms[i][6], max[i][7], min[i][7], rms[i][7], max[i][8], min[i][8], rms[i][8], max[i][9], min[i][9], rms[i][9], max[i][10], min[i][10], rms[i][10], max[i][11], min[i][11], rms[i][11], max[i][12], min[i][12], rms[i][12], max[i][13], min[i][13], rms[i][13], max[i][14], min[i][14], rms[i][14], max[i][15], min[i][15], rms[i][15]);
                 }
            //Fermeture du fichier 2
            fclose(fichier2); 
    }
 
    //Remise à zero des variables
      SOMME = 0;     
 
      MAX = 0;    
 
      MIN = 0;
 
    //On incrémente NUM pour passer au bloc suivant
    NUMBLOC = NUMBLOC + 1;
    i++;
 
    }
    //Fermeture du fichier1
    fclose(fichier1); 
    }
 
    //Fais patienter le système (demande d'appuyer sur "ENTREE" pour se fermer)
    system("PAUSE"); 
 
    return 0;
 
}
A noter que je déclare ici 4 colonnes et 2048 lignes mais le nombre de lignes et de colonnes peut varier.