Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Donde esta el error?

Estas en el tema de Donde esta el error? en el foro de C/C++ en Foros del Web. Hola a todos. Tengo un problema con este code. Código: #include <iostream> using namespace std; // El Switch ejecuta un bloque de intrucciones. int main() ...
  #1 (permalink)  
Antiguo 18/04/2013, 09:53
Avatar de Anzo  
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Pregunta Donde esta el error?

Hola a todos.

Tengo un problema con este code.

Código:
#include <iostream>

using namespace std;


// El Switch ejecuta un bloque de intrucciones.

int main()
{
    
    int opcion;
    bool opcion_valida = false; // La ponemos en false para que se inicie el while.
    
    
    while (! opcion_valida) // While en ingles es (mientras). Entonces mientras la opcion_valina no(!) sea valida se ejecutara el while.
    {
          
    cout << "1)Realizar llamada \n"
         << "2)Libreta de telefonos \n"
         << "3)Configuracion\n" << endl;
    cin >> opcion; // Ingresa los datos en pantalla.
    
    switch (opcion)
    {
           case 1:
                cout << "Se realiza una llamada" << endl;
                opcion_valida = true;
                break;
           case 2:
                cout << "Se busca un telefono" << endl;
                opcion_valida = true;
                break;
           case 3:
                cout << "Configuracion" << endl;
                opcion_valida = true;
                break;
           default:
                cout << "La opcion ingresada no es valida" << endl;
                break;
    }
    }    
    system("pause");
    return 0;
}


Cuando ingreso una letra en vez de un número, el programa hace un ciclo sin fin mostrando las 3 opciones sin parar.


Creo que el problema esta en el "int opcion;".

"int" es solo para números enteros, así que al insertar una letra se vuelve loco.

Creo que debería crear otra función donde al terminar el bloque de "switch" si el valor ingresado no es numérico, salte a otra parte del programa en donde detecte que es una letra y muestre un mensaje de opción incorrecta.

Pero no se me ocurre la forma de lograrlo.

Seguro que es fácil pero aun estoy un poco verde jeje.


Saludos.
  #2 (permalink)  
Antiguo 18/04/2013, 17:46
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Donde esta el error?

Hola! Como ya te diste cuenta el error se debe al ingresar una letra en vez de un entero. Esto ocurre porque al introducir el caracter cin genera un error haciendo que en opcion no se almacene nada, pero que sucede con el caracter ingresado??? este caracter queda en el bufer del teclado y por lo tanto en cada ciclo del while, cin va a generar un error ya que intenta leer constantemente esa letra.
Para solucionar el error tenes que limpiar el bufer del teclado agregando este bucle:
Código C:
Ver original
  1. cin >> opcion;
  2.             while(getchar()!='\n'); /* limpia bufer */


Otra solucion seria trabajar con caracteres, osea q opcion sea de tipo char


Saludos

PD: como estas en C++ creo q deberias usar cin.get en vez de getchar(pero igual deberia funcionar)
  #3 (permalink)  
Antiguo 19/04/2013, 11:02
Avatar de Anzo  
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Donde esta el error?

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! Como ya te diste cuenta el error se debe al ingresar una letra en vez de un entero. Esto ocurre porque al introducir el caracter cin genera un error haciendo que en opcion no se almacene nada, pero que sucede con el caracter ingresado??? este caracter queda en el bufer del teclado y por lo tanto en cada ciclo del while, cin va a generar un error ya que intenta leer constantemente esa letra.
Para solucionar el error tenes que limpiar el bufer del teclado agregando este bucle:
Código C:
Ver original
  1. cin >> opcion;
  2.             while(getchar()!='\n'); /* limpia bufer */


Otra solucion seria trabajar con caracteres, osea q opcion sea de tipo char


Saludos

PD: como estas en C++ creo q deberias usar cin.get en vez de getchar(pero igual deberia funcionar)

Me funciono a la perfección muchas gracias cesar.

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:49.