El problema en sí es un poco más complejo de lo que lo estás planteando.
En la siguiente línea "dia=dia_a+30-a;" tienes el siguiente problema: Ese "+30" no es correcto, el valor concreto de esa suma dependerá del número de días que tenga el mes en cuestión, para eso tienes que tener en cuenta qué meses tienen 30 días, cuáles 31 y, en el caso de febrero, tendrás que calcular si el año en cuestión es bisiesto para saber si tiene 28 o 29.
Además, también has hecho:
Código C++:
Ver originalif(a>dia_a)
{
dia=dia_a+30-a;
}
else
{
dia=dia_a-a;
}
if(b>mes_a)
{
mes=mes_a+12-b-1;
anio=anio_a-c-1;
}
else
{
mes=mes_a-b;
anio=anio_a-c;
}
Ahí tienes varios problemas:
* Si al día le sumas 30... tienes que restar un mes, en caso contrario estarás falseando la fecha.
* Cuando al mes le sumas 12... le estás restando 1... ¿por qué? ya has rectificado el valor del mes dado por el sistema unas líneas más arriba, luego ese "-1" está mal.
Puedes simplificar un poco el código si haces la propagación en cascada, como si fuese una suma de varios dígitos:
Código C++:
Ver originalint dia = 0, mes = 0, anio = 0;
dia = diaAct - diaNac;
if ( dia < 0 )
{
dia += 31; // Este valor dependerá del mes
mes--;
}
mes += (mesAct - mesNac);
if ( mes < 0 )
{
mes += 12;
anio--;
}
anio += (anioAct - anioNac);
Y de paso aprovecho para darte un par de consejos que te recomiendo seguir desde el principio:
* Asigna nombres que tengan sentido, "a,b,c" no son nombres válidos porque no aportan información acerca del contenido almacenado por la variable... los monosílabos resérvalos para las variables que hagan las veces de contadores en bucles.
* Tabula el código... tu código será mucho más legible y eso lo agradeceremos todos, tú el que más.
Un saludo.