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?