Cita de: DarkSorcerer en 25 Noviembre 2013, 11:19 AMEl problema que mas me complica es que si ingreso una letra, pareciera ser que el ciclo while se vuelve loco e imprime el menu infinitas veces, por ahi lei que es necesario usar el clear para restablecer "cin" y tambien usar el flag cin.fail(), pero no tengo los resultados esperados.El problema se debe a que el operador ">>" solo consumirá los caracteres validos para la conversión indicada, si el carácter en turno no es valido se queda en el bufer de la entrada estándar para ser procesado eventualmente.
Para solucionarlo solo debes eliminar el resto de la linea mediante sync o ignore. Un ejemplo sencillo del uso de este ultimo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <limits>
using std::numeric_limits;
int main()
{
int numero;
while (true) {
cout << "Introduce un numero: ";
if (cin >> numero)
break;
else {
cin.clear();
cin.ignore(numeric_limits<int>::max(), '\n');
}
}
cout << "El numero es " << numero << endl;
return 0;
}
Un saludo