Quiero comparar si una fecha es mayor que la otra en este programa si alguien me puede dar una idea de como hacerlo que no sea con if()
/* Escribe un programa para calcular el numero de dias
que hay entre dos fechas; declarar fecha como una
estructura */
#include<stdio.h>
struct fecha{
unsigned int dia, mes, año;
};
int main(int argc, char *argv[]){
struct fecha f[3];
int i, dia, mes, año;
for(i=0; i<2; i++){
printf("Introduzca fecha %d: ", i+1);
scanf("%d %d %d", &f[i].dia, &f[i].mes, &f[i].año);
}
dia = f[0].dia - f[1].dia;
mes = f[0].mes - f[1].mes;
año = f[0].año - f[1].año;
año = año * 360;
mes = mes * 30;
f[2].dia = año + (mes) + (dia);
printf("\n\n\nDias Trascurridos %d", f[2].dia);
return 0;
}
1-Evitar la ñ usar variables como año
2- Si usas unsigned en la estrutura las demas variabbles tambien deben ser unsgined
3-Declaraste tres estructuras la ultima estructura que aloja el resultado hubiera sido mas factible solo declarar unas variables.
4- El operador ternario (a>b) ? 1:0 puede ser una sustitucion al if.
#include<stdio.h>
struct fecha{
unsigned int dia, mes, año;
};
int main(){
struct fecha f[3];
unsigned int i = 0, dia = 0, mes = 0, año= 0;
for(i=0; i<2; i++){
printf("Introduzca fecha %u: ", i+1);
scanf("%u %u %u", &f[i].dia, &f[i].mes, &f[i].año);
}
dia = f[0].dia - f[1].dia;
mes = f[0].mes - f[1].mes;
año = f[0].anioo - f[1].año;
año = año * 360;
mes = mes * 30;
f[2].dia = anioo + mes + dia;
printf("\n\n\nDias Trascurridos %d", f[2].dia);
printf("La fecha 1 es %s que la fecha 2\n", (dia>=0) ? "menor":"mayor");
return 0;
}
Si bien es cierto que está bien usar tipos que concuerden entre sí, yo no recomendaría usar unsigned salvo que sea totalmente necesario.
Fíjate, por ejmeplo, en esto:
(dia>=0) ? "menor":"mayor"dia es unsigned, así que
siempre va a ser mayor o igual a 0.
La lógica y las operaciones cambian, además de que conseguiremos fácilmente un underflow al andar haciendo restas sin comprobaciones (sin ir más lejos, si el dia o el mes de [1] es mayor que el de
- saldrán resultados incorrectos).
Y en cuanto a la pregunta original, comparar fechas es como restar. Si el mes de la fecha más alta es menor que el de la más pequeña, igual que en una resta: le restas 1 al año y le sumas 12 al mes. Parecido para los días.
Hay que considerar que los años pueden ser bisiestos.
Que tal si calcular la distancia hacia una fecha pasada comun de cada fecha y luego la diferencia entre ambas ditancias?
Y qué tal si de hace con time.h, que ya tiene todo eso pensado?
Cita de: MAFUS en 24 Julio 2018, 13:54 PM
Y qué tal si de hace con time.h, que ya tiene todo eso pensado?
...exacto, como usar
difftime() y esas cosas :rolleyes:
https://en.cppreference.com/w/c/chrono/difftime
Basta ver el comentario del código para suponer que la idea es hacerlo a mano.
A mi me ha dado la impresión de que lo que quiere es saber si una fecha va antes de otra y que desconocía que con time.h se puede hacer.
/* Escribe un programa para calcular el numero de dias
que hay entre dos fechas; declarar fecha como una
estructura */
No pone de que forma debes hacer el programa, simplemente te indica que resuelvas la forma para calcular los días entre dos fechas. Y encima fecha puedes declararla como una estructura time_t (Ejemplo, time_t fecha; ).
Si esto no es lo que buscaba el profesor este argumento astuto puede usarse contra él ;) :xD
PD Hay que tener en cuenta que el resultado de la función difftime() lo devuelve en segundos, no es como si al usarla resolviera completamente el ejercicio.