Secondo me potresti utilizzare una coda, realizzata con una struttura dati ed effettuando l' allocazione dinamica della memoria, pertanto:
char matricola[6];
char cognome[20];
char media[2];
char ***database;
li sostituerei con la struttura dati:
struct record{
int matricola[6];
char cognome[20];
float media[2];
struct record *pun;
};
mentre l' allocazione dinamica la effettuerei in questo modo:
p=(struct record *)malloc(sizeof(struct record));
fscanf(file_matricole,"%s\n",p->matricola);
fscanf(file_matricole,"%s\n",p->cognome);
fscanf(file_matricole,"%s\n",p->media);
paus=p;
for (i = 1; i< righe/3; i++)
{
paus->pun=(struct record *)malloc(sizeof(struct record));
paus=paus->pun;
fscanf(file_matricole,"%s\n", paus->matricola);
fscanf(file_matricole,"%s\n", paus->cognome);
fscanf(file_matricole,"%s\n", paus->media);
}
paus->pun=null;
Anche se in questo modo il file matricole.txt deve essere fatto così:
[IDmatricola]
[cognome]
[mediavoto]
[IDmatricola]
[cognome]
[mediavoto]
......
In definitiva il programma utilizzando questa struttura dati sarebbe:
#include <stdio.h>
#include <stdlib.h>
#define null 0
struct record{
int matricola[6];
char cognome[20];
float media[2];
struct record *pun;
};
int main (void)
{
int c, i, righe;
struct record *p, *paus;
FILE *file_matricole;
/*acquisizione del numero di righe del file*/
righe=0;
file_matricole = fopen("matricole.txt", "r");
while ((c = getc (file_matricole)) != EOF)
if ( c== '\n')
righe++;
printf("%d\n", righe);
fclose(file_matricole);
/*acquisizione dei valori da file*/
file_matricole = fopen("matricole.txt", "r");
p=(struct record *)malloc(sizeof(struct record));
fscanf(file_matricole,"%s\n",p->matricola);
fscanf(file_matricole,"%s\n",p->cognome);
fscanf(file_matricole,"%s\n",p->media);
paus=p;
for (i = 1; i< righe/3; i++)
{
paus->pun=(struct record *)malloc(sizeof(struct record));
paus=paus->pun;
fscanf(file_matricole,"%s\n", paus->matricola);
fscanf(file_matricole,"%s\n", paus->cognome);
fscanf(file_matricole,"%s\n", paus->media);
}
paus->pun=null;
fclose(file_matricole);
/*stampa informazioni matricola*/
while(p!=null)
{
printf("matricola: %s cognome: %s media: %s\n", p->matricola, p->cognome, p->media);
p=p->pun;
}
return(0);
}
Se può andarti bene lo stesso.
Matteo