// leerdatos.h - Funciones para leer datos de forma segura
#if !defined( _LEERDATOS_H_ )
#define _LEERDATOS_H_

#include <iostream>
#include <limits>
#include <string>
using namespace std;

template<class T> bool leerDato(T& dato)
{
  cin.exceptions(ios::failbit | ios::badbit);
  try
  {
    cin >> dato;
    // Eliminar caracteres sobrantes. Por ejemplo <Entrar>.
    cin.ignore(numeric_limits<int>::max(), '\n');
    return true;
  }
  catch(ios_base::failure& e)
  {
    if (cin.eof())
    {
      cin.clear();
      return false; // se pulsó Ctrl+Z
    }
    else
    {
      cout << e.what() << ": dato no válido.\n>";
      cin.clear();
      cin.ignore(numeric_limits<int>::max(), '\n');
      return leerDato(dato);
    }
  }
}

bool leerDato(string& dato);

int menu(char *opciones[], int numOpciones);

#endif // _LEERDATOS_H_
