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:
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...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++; }
Come dovrei fare?

Rispondi quotando