Código mas eficiente

Dudas e ideas sobre los distintos e infinitos (:-)) algoritmos existentes.
Responder
Mensaje
Autor
AqsDes
Mensajes: 23
Registrado: 23/01/2018 1:43 pm

Código mas eficiente

#1 Mensaje por AqsDes » 26/01/2019 5:58 am

Hola, pues me gustaria saber si hay una forma mas eficiente de resolver este problema que el que tengo aqui...

Código: Seleccionar todo

char cResp;
do {
cout << "Si o No (S, N)?" ;
cin.get(cResp);
cin.get();  //Nueva linea
if (cResp != 'S' & & cResp != 'N' & & cResp != 's' & & cResp != 'n') 
cerr << "Respuesta no valida" << endl;
} while (cResp != 'S' & & cResp != 's' & & cResp != 'N' & & cResp != 'n') ;

El problema es pedir al usuario una respuesta que debe responder con 'S', 'N' , 'n', 's'. Y si el usuario coloca otra cosa se debe dar un mensaje de error y se debe pedir de nuevo otra respuesta.

mollok
Mensajes: 412
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Código mas eficiente

#2 Mensaje por mollok » 26/01/2019 10:53 am

Código: Seleccionar todo

#include <iostream>
#include <cctype>

using namespace std;

int main()
{
    char cResp;
    bool error = true;

    do {
        cout << "Si o No (S, N)? " ;
        cin >> cResp;
        cin.clear();                            // Borrar todas las entradas
        cin.ignore((unsigned short)-1, '\n');   // posteriores al char adquirido
        
        cResp = toupper(cResp); // el char a mayusculas
        if (cResp != 'S' && cResp != 'N') // El control
            cerr << " " << cResp << " Respuesta no valida" << endl;
        else
            error = false; // se ha respondido correctamente
    } while (error); // fíjate que no duplico el control

    return 0;
}
Una manera podría ser esta pero ocurre que si se introduce una cadena larga, por ejemplo 'sueño', la dará por buena pues lleva una 's' en el inicio.
Para solucionar esto deberías conseguir toda la cadena, ver si es mas larga que un sólo carácter y después hacer la comprobación cómo en el código que te he pasado.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

AqsDes
Mensajes: 23
Registrado: 23/01/2018 1:43 pm

Re: Código mas eficiente

#3 Mensaje por AqsDes » 26/01/2019 5:23 pm

Gracias por la ayuda.
Y ahora solo por curiosidad me gustaría saber exactamente para que sirve cin.clear(). Solo por curiosidad y muchas gracias por la indicación.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado