Volgens mij kloppen er een aantal dingen niet in die code.
Eigenlijk wil je een tweedimensionale array maken waarin je je matrix zet. In C gaat dat door een keer geheugen te reserveren voor de breedte en dan voor iedere van die breedte eentje voor lengte. Je hebt dus eigenlijk een pointer naar een pointer.
Gelukkig voor jou had ik zojuist een beetje tijd en ik heb dus een lezer voor je gemaakt. Ik hoop dat je er wat aan hebt, anders is het zonde van mijn tijd geweest.
Code: Selecteer alles
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// VOORWAARDE VOOR ARRAY: het moet een vierkantige of rechthoekige array zijn (zoals een matrix behoort te zijn)
int main (int argc, char** argv)
{
FILE *f = fopen("matrix.txt", "rt"); // file MOET bestaan
float **matrix; // 2d array
int matrow, matcol;
if (f == NULL)
return 1;
// we tellen het aantal regels, dat is dus je aantal rijen. dit is lekker dynamisch
int numrows = 0;
char buffer[1000];
while (!feof(f))
{
fgets(buffer, 1000, f);
numrows++;
}
// alloceer genoeg ruimte voor de rijen
matrix = (float**) malloc(numrows * sizeof(float*));
matrow = numrows;
rewind(f); // ga terug naar het begin
// tel het aantal kolommmen
float valbuf[100]; // tijdelijke opslag waarden, voordat het aantal kolommen bekend is
fgets(buffer, 1000, f);
char *number = strtok(buffer, " "); // gescheiden door spatie
int colpos = 0;
while (number != NULL)
{
float val = atof(number); // string naar float
valbuf[colpos] = val;
number = strtok (NULL, " ");
colpos++;
}
matrix[0] = (float*) malloc(colpos * sizeof(float));
matcol = colpos;
for (int i = 0; i < colpos; i++)
matrix[0][i] = valbuf[i];
for (int i = 1; i < numrows; i++) // geen while maar for, nu hebben we een counter
{
matrix[i] = (float*) malloc(colpos * sizeof(float)); // voor iedere rij kolommmen vrijmaken
fgets(buffer, 1000, f);
number = strtok(buffer, " "); // gescheiden door spatie
colpos = 0;
while (number != NULL)
{
float val = atof(number); // string naar float
matrix[i][colpos] = val;
number = strtok (NULL, " ");
colpos++;
}
}
fclose(f);
// print de array
for (int i = 0; i < matrow; i++)
{
for (int j = 0; j < matcol; j++)
printf("%f ", matrix[i][j]);
printf("\n");
}
getchar();
return 0;
}