elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa que solo acepte números
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa que solo acepte números  (Leído 1,979 veces)
julio1

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Programa que solo acepte números
« en: 3 Febrero 2019, 11:48 am »

Estoy intentando hacer una función que pida un numero del 0 al 9 al usuario y que sea robusta. He estado mirando códigos para guiarme y la mayoría fallan al encontrarse con alguna de estas situaciones, normalmente debido al uso de cin:
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;
        }
    }
}


« Última modificación: 3 Febrero 2019, 11:50 am por julio1 » En línea

Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: Programa que solo acepte números
« Respuesta #1 en: 4 Febrero 2019, 07:25 am »

Una variante, un poco más simple, creo:

Código:
int pedir_numero()
{
    cout << "Introduce una opcion: ";
    string data{};

    while (getline(cin, data))
    {
        if (data.length() != 1 || !isdigit(data[0])) // isdigit() sabe si es 0...9
        {
            // cerr se prefiere para mensaje de error que suelen ir a auditoría,
            // quizá aquí mejor cout.
            // y no uses endl, si realmente lo necesitas es porque hay algo muy raro
            // en tu sistema.
            cout << "Numero invalido, vuelve a intentarlo!\n";
            continue;
        }

        // si llegó hasta aquí es un número de un solo dígito,
       
        return data[0] - '0';

    }

    return -1;
}



En línea

julio1

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Programa que solo acepte números
« Respuesta #2 en: 4 Febrero 2019, 19:19 pm »

Gracias por aportar una alternativa
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines