E' il mio primo programma che realizzo in maniera "modulare"... Il programma vuole che legga da un file una serie di date e restituisca a video la più recente, la meno recente e la differenza tra le due. Io ho fatto una cosa del genere.
main.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include "data.h"
int main()
{
data *v;
int num, dif, i;
data dataremota, datarecente;
num = Leggi(&v);
if(num == 0){
free(v);
return 1;
}
datarecente = Confronta_date (v, &dataremota, num);
dif = Dif_date(dataremota, datarecente);
printf ("DATA PIU' REMOTA: ");
Stampa_data(dataremota);
printf ("DATA PIU' RECENTE: ");
Stampa_data(datarecente);
printf ("DIFFERENZA TRA LE DUE DATE: %d giorno/i", dif);
return 0;
}
data.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "data.h"
#define file1 "f1.txt"
int Leggi(data** v)
{
FILE* pf;
int num=0, i=0;
char s[20];
pf = fopen(file1, "r");
if (pf == NULL){
printf ("Errore nell'apertura del file\n");
return 0;
}
while ((fscanf(pf, "%s", s) != EOF)){
num++;
}
rewind(pf);
*v = malloc (num*sizeof(data));
i=0;
while ((fscanf(pf, "%d %*c %d %*c %d", &(*v)[i].gg, &(*v)[i].m, &(*v)[i].a)) != EOF){
printf ("%d/%d/%d\n", (*v)[i].gg, (*v)[i].m, (*v)[i].a);
i++;
}
fclose(pf);
return num;
}
data Confronta_date (data* v, data* min, int num)
{
data max;
int i=0;
int uno, due;
max = v[0];
*min = v[0];
for (i=0; i<num-1; i++){
uno = v[i].gg + 30*v[i].m + 360*v[i].a;
due = v[i+1].gg + 30*v[i+1].m + 360*v[i+1].a;
if (due>uno){
max = v[i+1];
}
else if (due<uno){
*min = v[i+1];
}
}
return max;
}
void Stampa_data(data Data)
{
printf ("%d/%d/%d\n", Data.gg, Data.m, Data.a);
return;
}
int Dif_date (data uno, data due)
{
int dif;
dif = (uno.gg + 30*uno.m + 360*uno.a) - (due.gg + 30*due.m + 360*due.a);
return (fabs(dif));
}
data.h
codice:
typedef struct Data{
int gg, m, a;
} data;
int Leggi(data** v);
data Confronta_date(data*, data*, int);
void Stampa_data(data);
int Dif_date (data, data);
Ora però vorrei fare in modo che la parte:
codice:
while ((fscanf(pf, "%d %*c %d %*c %d", &(*v)[i].gg, &(*v)[i].m, &(*v)[i].a)) != EOF){
printf ("%d/%d/%d\n", (*v)[i].gg, (*v)[i].m, (*v)[i].a);
i++;
}
venga sostituita da una funzione che si chiama ad esempio "Leggi_data" che mi legga la singola data... In questo modo potrei inserire quest'ultima nel data.c e data.h e lasciare la funzione "Leggi" nel main...
Come dovrei fare?