46> Una volta controllato che due date sono valide trovare la differenza in giorni tra le due date. (Potrebbe risultare utile stabilire prima quale delle due date รจ maggiore).
#include <stdio.h>
int data(int, int, int);
int diff(int, int, int, int, int, int);
int bisestile(int);
int main(){
    int gg1,gg2,mm1,mm2,aaaa1,aaaa2;
    int max,n;
    do{
        putchar('\n');
        printf("Inserire giorno 1:");
        scanf("%d", &gg1);
        fflush(stdin);
        printf("Inserire mese 1:");
        scanf("%d", &mm1);
        fflush(stdin);
        printf("Inserire anno 1:");
        scanf("%d", &aaaa1);
        fflush(stdin);
    }while(!data(gg1, mm1, aaaa1));
    printf("\nData 1 valida!\n");
    do{
        putchar('\n');
        printf("Inserire giorno 2:");
        scanf("%d", &gg2);
        fflush(stdin);
        printf("Inserire mese 2: ");
        scanf("%d", &mm2);
        fflush(stdin);
        printf("Inserire anno 2: ");
        scanf("%d", &aaaa2);
        fflush(stdin);
    }while(!data(gg2, mm2, aaaa2));
    printf("\nData 2 valida!\n");
    n=diff(gg1,mm1,aaaa1,gg2,mm2,aaaa2);
    printf("\nLa differenza tra le 2 date e' di %d giorni",n);
    return 0;
}
int bisestile(int a){
    if(a%4==0){
        if(a%100==0){
            if(a%400==0){
                return 1;
            } else {
                return 0;
            }
        } else {
            return 1;
        }
    } else {
        return 0;
    }
}
int diff(int g1, int m1, int a1, int g2, int m2, int a2){
    int giornitot[] = {0,31,59,90,120,151,181,212,243,273,304,334};//giorni dal primo Gennaio alla fine del mese di numero indice -1
    int bisgiornitot[] = {0,31,60,91,121,152,182,213,244,274,305,335}; //(bisestile)
    int totg,aa,delta1,delta2;
    totg=0;
    if(a1==a2){ //stesso anno
        if(bisestile(a1)){
            delta1=bisgiornitot[m1-1]+g1;
            delta2=bisgiornitot[m2-1]+g2;
            if(delta1>delta2){
                return (delta1-delta2);
            } else {
                return (delta2-delta1);
            }       
        } else {
            delta1=giornitot[m1-1]+g1;
            delta2=giornitot[m2-1]+g2;
            if(delta1>delta2){
                return (delta1-delta2);
            } else {
                return (delta2-delta1);
            }
        }
    }
    if(bisestile(a1)){
        totg=totg+366-(bisgiornitot[m1-1]+g1);
    } else {
        totg=totg+365-(giornitot[m1-1]+g1);
    }
    aa=a1+1;
    while(aa<a2){
        if(bisestile(aa)){
            totg=totg+366;
        }else{
            totg=totg+365;
        }
        aa=aa+1;
    }
    if(bisestile(a2)){
        totg=totg+(bisgiornitot[m2-1]+g2);
    }else{
        totg=totg+(giornitot[m2-1]+g2);
    }
    return totg;
}
int data(int gg, int mm,int aa){
	int v[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	if(aa<0){
		printf("Data non esistente\n");
		return 0;
	}
    if(bisestile(aa)){
        v[2]=29;
    }
	if(mm>12 || mm<=0){
		printf("Data non esistente\n");
		return 0;
	}
	if(gg>v[mm]){
		printf("Data non esistente\n");
		return 0;
	}
	return 1;
}

    
  
046.c