2017-01-31 4 views
0

Ich habe eine Textdatei, die eine Matrix N von 3 Float-Nummern enthält. Ich muss die Matrix lesen und die Daten in ein dynamisch zugewiesenes Array setzen. Ich habe den folgenden Code:Lesen und Schreiben in dynamisch zugewiesenen Array

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define X_ 0 
#define Y_ 0 
#define Z_ 0 
#define VERTEX_COUNT 3 


void read_data(FILE* FILE_POINTER, float **GRID, int N_LINES) 
{ 
int i = 0, j=0; 

for(i = 0; i < N_LINES; i++) 
{ 
    for(j = 0; j < VERTEX_COUNT; j++) 
    { 
    if (!fscanf(FILE_POINTER, "%f", &GRID[i][j])) 
     break; 
    } 

} 
} 



int find_length(FILE* FILE_POINTER) 
{ 
int ch = 0; 
int length = 0; 

if(FILE_POINTER != NULL) 
{ 
    while(!feof(FILE_POINTER)) 
    { 
     ch = fgetc(FILE_POINTER); 
     if(ch == '\n') 
     { 
      length++; 
     } 
    } 
} 
else 
{ 
    perror("File not found"); 
    exit(EXIT_FAILURE); 
} 
return length; 
} 



int main() 
{ 
/* Define variables needed*/ 
int i=0,j=0; 
float** GRID_GEOM; 
float** GRID_TOPO; 

/* Open the files containing the data*/ 
FILE* FILE_GEOM = fopen("temporary_geom.txt","r"); 
FILE* FILE_TOPO = fopen("temporary_topo.txt","r"); 

/* Find length of the data set*/ 
int N_POINTS = find_length(FILE_GEOM); 
int N_TRIANG = find_length(FILE_TOPO); 


/* Dynamically allocate memory for each data set*/ 
GRID_GEOM = malloc(N_POINTS * sizeof(float*)); 
for (i = 0; i < N_POINTS; i++) 
{ 
    GRID_GEOM[i] = malloc(VERTEX_COUNT * sizeof(float)); 
} 

GRID_TOPO = malloc(N_TRIANG * sizeof(float*)); 
for (i = 0; i < N_TRIANG; i++) 
{ 
    GRID_TOPO[i] = malloc(VERTEX_COUNT * sizeof(float)); 
} 

/* Read data into the arrays*/ 
read_data(FILE_GEOM, GRID_GEOM, N_POINTS); 


/* Close the files */ 
fclose(FILE_GEOM); 
fclose(FILE_TOPO); 

/* Free the memory allocated */ 
for (i = 0; i < N_POINTS; i++) 
{ 
    free(GRID_GEOM[i]); 
} 
free(GRID_GEOM); 

for (i = 0; i < N_TRIANG; i++) 
{ 
    free(GRID_TOPO[i]); 
} 
free(GRID_TOPO); 
} 

Wenn ich versuche, jede Position in der Matrix GRID_GEOM zuzugreifen, alle Werte zu sein scheinen 0. Ich kann nicht herausfinden, warum.

+1

Warum sind Sie in Großbuchstaben für Variablen? Kleinschreibung ist die Norm. Auch bessere Namen wären nützlich –

+2

Versuchen Sie auch zu lernen, wie man den Debugger verwendet –

+0

Bitte geben Sie einige Beispiel-Eingabe und zeigen, was die "Ausgabe" ist (Ihr Code zeigt nicht, an welchem ​​Punkt gibt es 0 Werte; Haben Sie überprüft, ob die Schleifen sind tatsächlich eingegeben? –

Antwort

0

In Funktion find_length, lesen Sie die ganze Datei so, wenn Sie den Dateizeiger an read_data übergeben, zeigt es bereits auf das Ende davon.

Sie können entweder rewind the pointer, oder schließen Sie die Datei und öffnen Sie sie erneut zum Parsen von Daten.

Verwandte Themen