Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/04/2016, 02:42
Avatar de agusax
agusax
 
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Duda puntual: Cadenas de fechas

Cita:
Iniciado por eferion Ver Mensaje
Está claro que si tu clase Fecha tiene que entender que 00004 puede ser un día válido no tiene sentido limitar la entrada de sscanf a 2 caracteres.

Código C++:
Ver original
  1. iCheck = sscanf(fecha, "%d/%d/%d", &iDia_, &iMes_, &iAno_);

Esta versión no te debería dar esos problemas.

Otra cosa es que esa fecha se tenga que interpretar como no válida... en cuyo caso lo que no tiene sentido es que devuelvas una excepción en el constructor de la clase Fecha. En este caso tendrías que tener un booleano interno en Fecha que indicase si la fecha almacenada es válida. Al realizar las comparaciones, si una fecha es válida y la otra no automáticamente ambas fechas van a ser diferentes. O eso o haces una sobrecarga del operador de comparación específica:

Código C++:
Ver original
  1. class Fecha
  2. {
  3.   // versión 1
  4.   bool operator!=(const char* fecha) const;
  5.  
  6.   // versión 2
  7.   friend bool operator!=(const Fecha& fecha1, const char* fecha2);
  8. };

Un saludo.
Ya probé a poner sscanf(fecha, "%d/%d/%d", &iDia_, &iMes_, &iAno_), pero entonces no me pasa después el test de desbordamiento, debería ser una fecha inválida.
Mi operador de comparación es de este modo:
Código C++:
Ver original
  1. bool operator == (const Fecha& f1, const Fecha& f2){
  2.     return ((f1.dia() == f2.dia()) && (f1.mes() == f2.mes()) && (f1.anno() == f2.anno()));
  3. }
  4.  
  5. bool operator != (const Fecha& f1, const Fecha& f2){
  6.     return !(f1 == f2);
  7. }

Se supone que el constructor, lo uso para almacenar los valores de la cadena en iDia, iMes, iAno

Muchas gracias por responder
__________________
"Nunca confíes en un ordenador que no puedas lanzar por una ventana" -- Steve Wozniak
"El software es como el sexo: mejor si es libre y gratis" -- Linus Torvalds