PDA

Visualizza la versione completa : [C]caricamento dati txt su struttura


fedrock
13-07-2014, 18:29
Dopo il post di ieri (http://forum.html.it/forum/showthread.php?threadid=291237) dato la vostra grande voglia di rivedermi in un nuovo post ho fatto qualche altra prova ma come si poteva immaginare_

Ho creato un file del tipo:


polli: 4
gatti: 2
tacchini: 5
cavalli: 3
mucche: 10


Che passo con il solito argv, volevo fare in modo da passare il numero degli animali all'interno della struttura "fatt", ho quindi pensato prima di metterli all'interno di un'altra struttura in modo da fare una cosa del tipo:


if db[i].animale=='polli'
fatt[i].polli = db[i].n_animali;


Sicuramente c'ra un modo molto pi veloce per fare questo ma io per ora conosco poche cose, comunque compilato non da nessun errore ne warning ma aprendolo non spara a video la printf...:dh:


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

typedef struct
{
char animale[30];
int n_animale;

}db;

typedef struct
{
int polli;
int mucche;
int cavalli;
int tacchini;
int gatti;
}fatt;


db *load(char filename[])
{
FILE *f;
f = fopen(filename, "r");
if(f==NULL)
{
perror("ERRORE APERTURA");
exit(1);
}
db *database = NULL;
int i = 0;
char buffer[50];
while((fgets(buffer, sizeof(buffer), f)!=NULL))
{
i++;
database = (db *)realloc(database, i * sizeof(db));
sscanf(buffer, "%c:%d", database[i-1].animale, &database[i-1].n_animale);
}
fclose(f);
return database;
}







int main(int argc, char *argv[])
{
db *datasheet = load(argv[1]);
int i = 0;
while(datasheet[i].animale==NULL)
{
printf("%s: %d", datasheet[i].animale, datasheet[i].n_animale);
i++;
}
return 0;
}

Loading