• Lunes 16 de Diciembre de 2024, 02:32

Autor Tema:  Leer una fecha con getline() y cin.ignore()  (Leído 1223 veces)

wien996

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Leer una fecha con getline() y cin.ignore()
« en: Miércoles 10 de Noviembre de 2010, 08:23 »
0
Buenos días a todos... estoy realizando una práctica en la que debo validar unos tests y realizar un código sobre como recoger una fecha con constructores, leerla y mostrarla:
Esto es el fichero.h

#ifndef _FECHA_H
#define _FECHA_H

#include <string>
#include <iostream>

struct TFecha {
   int dia;
   int mes;
   int anyo;
};

//Construye una fecha, colocandola el día 1 de Enero de 1970.
void inicializaFecha (TFecha &f);

//Construye una fecha, colocandola el día 1 de Enero de 1970.
void inicializaFecha (TFecha &f, int dia, int mes, int anyo);

//Escribe la fecha por la salida estandar. El formato es dia/mes/año.
void muestraFecha (const TFecha &f);

//Lee por la entrada estandar una fecha, y la devuelve.
TFecha    leerFecha();
   

#endif

[b]Este es el fichero .cpp de la fecha:[/b]

#include "Fecha.h"

void inicializaFecha (TFecha &f){
   f.dia = 1;
   f.mes = 1;
   f.anyo = 1970;
}

void inicializaFecha(TFecha &f, int dia, int mes, int anyo)
{
   f.dia = dia;
   f.mes = mes;
   f.anyo = anyo;
}

TFecha leerFecha(){
   int d, m, a;
   TFecha fec;
   std::cout << "Introduzca el día de la fecha: " << std::endl;
   std::cin >> d;
   std::cout << "Introduzca el mes de la fecha: " << std::endl;
   std::cin >> m;
   std::cout << "Introduzca el año de la fecha: " << std::endl;
   std::cin >> a;

   fec.dia = d;
   fec.mes = m;
   fec.anyo = a;

   return fec;
}

void muestraFecha(const TFecha &f){
   std::cout << f.dia << "/" << f.mes << "/" << f.anyo << std::endl;
};

y por último aquí estan los dichosos tests que no soy capaz de pasar:

TEST(ConstructorPorDefecto) {
   TFecha f;
   inicializaFecha(f);
   muestraFecha(f);
   CHECK_OUTPUT("1/1/1970");
}

TEST(InitYEscribe) {
   TFecha f;
   inicializaFecha(f, 12, 10, 1492);
   muestraFecha(f);
   CHECK_OUTPUT("12/10/1492");

   inicializaFecha(f, 21, 10, 1492);
   muestraFecha(f);
   CHECK_OUTPUT("21/10/1492");
}

LOS ERRORES QUE ME DAN AL COMPILAR LOS TESTS SON : error failure in ConstructorPordefecto: expected "1/1/1970" but was "1/1/1970"
                                                                                        error failure in InitYEscribe: expected "1/1/1970" but was "1/1/1970"
                                                                                         error failure in InitYEscribe: expected "21/10/1942" but was "21/10/1942"

si me pudiérais echar una mano...muchas gracias y un saludo!!!

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Leer una fecha con getline() y cin.ignore()
« Respuesta #1 en: Miércoles 10 de Noviembre de 2010, 20:24 »
0
1. Define CHECK_OUTPUT
2. Puede ser el fin de línea extra en tu cout. No deberías incluir ese fin de línea por que haces que la función no pueda usarse en otros contextos, por ejemplo si es necesario mostrar una fecha en medio de una oración.
3. Como estás usando C++ deberías definir un constructor en tu struct en lugar de usar una función de inicialización :
Código: C++
  1.  
  2. struct TFecha
  3. {
  4.     TFecha(int dia = 1, int mes = 1, int año = 1970) : dia(dia), mes(mes), año(año)
  5.     {
  6.     }
  7.  
  8.     void mostrar()
  9.     {
  10.         std::cout << dia << "/" << mes << "/" << año;
  11.     }
  12.  
  13.     int dia;
  14.     int mes;
  15.     int año;
  16. };
  17.  
  18.  
  19.