codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SLEN 31
typedef struct persona
{
char name[SLEN];
char surname[SLEN];
int day, month, year;
} PERSONA;
void read_file_1 (char* filename, PERSONA** list, int* dim);
PERSONA* read_file_2 (char* filename, int* dim);
PERSONA* search (PERSONA* list, const int dim);
int main (int argc, char *argv[])
{
char fname[SLEN];
PERSONA* list = NULL;
PERSONA* occ = NULL;
int dim;
printf("file: ");
scanf("%s",fname);
read_file_1(fname,&list,&dim);
// list = read_file_2(fname,&dim);
if (list==NULL)
{
printf("caricamento fallito\n");
return -1;
}
occ = search(list,dim);
if (occ == NULL)
printf("\nnessun elemento trovato\n");
else
{
printf("\nla ricerca ha prodotto il seguente risultato:\n\t");
printf("%s %s %d %d %d\n",occ->name,occ->surname,occ->day,occ->month,occ->year);
}
free(list);
return 0;
}
void read_file_1 (char* filename, PERSONA** list, int* dim)
{
FILE *input = NULL;
int i;
if ((input=fopen(filename,"r"))==NULL)
{
printf("errore apertura file\n");
return;
}
fscanf(input,"%d",dim);
*list = (PERSONA*)malloc(*dim*sizeof(PERSONA));
if (*list == NULL)
{
printf("errore allocazione memoria\n");
return;
}
for (i=0; i<*dim; i++)
{
fscanf(input, "%s", (*list)[i].name);
fscanf(input, "%s", (*list)[i].surname);
fscanf(input, "%d", &((*list)[i].day));
fscanf(input, "%d", &((*list)[i].month));
fscanf(input, "%d", &((*list)[i].year));
}
fclose(input);
return;
}
PERSONA* read_file_2 (char* filename, int* dim)
{
PERSONA* list = NULL;
FILE *input = NULL;
int i;
if ((input=fopen(filename,"r"))==NULL)
{
printf("errore apertura file\n");
return NULL;
}
fscanf(input,"%d",dim);
list = (PERSONA*)malloc(*dim*sizeof(PERSONA));
if (list == NULL)
return NULL;
for (i=0; i<*dim; i++)
{
fscanf(input,"%s",list[i].name);
fscanf(input,"%s",list[i].surname);
fscanf(input,"%d",&(list[i].day));
fscanf(input,"%d",&(list[i].month));
fscanf(input,"%d",&(list[i].year));
}
fclose(input);
return list;
}
PERSONA* search (PERSONA* list, const int dim)
{
PERSONA* occ = NULL;
char searchname[SLEN], searchsurname[SLEN];
int i;
printf("\nnome: ");
scanf("%s",searchname);
printf("cognome: ");
scanf("%s",searchsurname);
for (i=0; i<dim; i++)
if ( strcasecmp(searchname,list[i].name)==0 && strcasecmp(searchsurname,list[i].surname)==0 )
occ = list+i;
return occ;
}