1- Si el usuario introduce espacios antes del numero o después, la entrada es válida
2- Si se pulsa control+z (eof en windows) se produce un ciclo infinito o la entrada se da como válida
3- Si el usuario tipeo 2ff la entrada resulta válida
4- La entrada se queda esperando a que tecleemos algo por culpa de algún salto de línea
He hecho el siguiente código, creo que soluciona los problemas comentados anteriormente. Me gustaría saber su opinión y si creen en algún caso dónde podría fallar o si puedo mejorarlo.
Código:
int pedir_numero()
{
string data = "";
while (true)
{
cout << "Introduce una opcion: ";
if (!getline(cin, data))
{
return -1;
}
if (data.length() != 1 || isspace(data[0]))
{
cerr << "Numero invalido, vuelve a intentarlo!" << endl;
continue;
}
try
{
return stoi(data);
}
catch (const exception &e)
{
cerr << "Numero invalido, vuelve a intentarlo!" << endl;
}
}
}