Tu programa tiene varios errores:
Código C:
Ver originalint regularBisiesto( Fecha fechaRb ){ //A0001
if ((fechaRb.anio %4 == 0 && fechaRb.anio%100 != 0) || (fechaRb.anio%400) == 0){
return 1;
}
else{
return 0;
}
}
En la función anterior, únicamente haces uso del campo "anio". En este caso es preferible modificar la función para que únicamente acepte un entero. ¿motivo? Pues porque te obliga a hacer cosas raras:
Código C:
Ver originalfor( i=fecha1.anio +1; i < fecha2.anio -1; i++){ // A0009
difDias += 365;
regBisAnioF1 = regularBisiesto(fecha1);
difDias += regBisAnioF1;
}
Si te fijas, en el intervalo fecha1.anio < i < fecha2.anio compruebas llamas todo el rato a regularBisiesto pasando "fecha1"... fecha que, dicho sea de paso, no cambia... esto quiere decir que si fecha1 es inicialmente bisiesto estarás asumiendo que todos los años intermedios son bisiestos y, si fecha1 no es bisiesto, ignorará todos los años bisiestos que se encuentren en el intervalo.
Además, ahí estás eliminando un año. Prueba a poner dos fechas separadas exactamente por dos años. p.ej: 1/1/2001 y 1/1/2003. Verás que el programa te dice que la diferencia es de 365 días.
Código C:
Ver originalregBisAnioF2 = regularBisiesto(fecha2);
for( i=1; i < fecha2.mes; i++ ){ //A0010
if( i == 2 ){
difDias += regBisAnioF2;
}
difDias += tot_dias[i];
}
En este caso... ¿qué pasa si fecha2 = 01/02/2004? pues que asume que el 2004 es bisiesto y le suma el día correspondiente al 29 de febrero.
También tienes código innecesario. Por ejemplo:
Código C:
Ver originalif( fecha1.mes < 12 ){
for( i = fecha1.mes +1; i <= 12; i++ ){
difDias += tot_dias[i];
}
}
Ese if es innecesario. ¿por qué? facil. Si el mes es 12, al ejecutarse el bucle no se cumplirá i = mes + 1 <= 12 <=> i = 13 <= 12, por lo que el bucle no se ejecutará en ningún momento. Eliminar código innecesario mejora enormemente la legibilidad del código (y de paso eliminas cosas que no necesitas)
Y con eso más o menos entiendo que debería estar. Eso sí, deberías acostumbrarte a usar un depurador de código. Con eso y con un cuadernito con el que hacer las cuentas a mano a ver si cuadran deberías ser capaz de localizar todos estos problemas :)
Y bueno, hablando también del diseño general del código tengo malas noticias. Repites demasiado código en proporción con el tamaño final del programa. Creo que deberías intentar eliminar el código redundante en la medida de lo posible