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

Error al seleccionar opcion

Estas en el tema de Error al seleccionar opcion en el foro de C/C++ en Foros del Web. Hola, antes que nada les digo lo que hace el codigo que esta mas abajo. El usuario debe introducir una opcion que pueden ser los ...
  #1 (permalink)  
Antiguo 26/02/2009, 11:33
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Error al seleccionar opcion

Hola, antes que nada les digo lo que hace el codigo que esta mas abajo. El usuario debe introducir una opcion que pueden ser los numros del 1 al 4 y le devuelve un mensaje, pero si no es un numero del 1 al 4 le da para ingresar de nuevo la opcion.

Al compilarlo no da errores, anda correctamente salvo por un detalle, cuando ingreso un numero que no sea ninguno del 1 al 4, todo bien, me da para ingresar la opcion de nuevo, pero si ingreso una letra queda en un bucle sin fin.

Me pueden ayudar a descubrir el error?

Gracias.

Código:
int main()
{	
	cout<<"Programa para realizar las cuatro operaciones basicas."<<endl<<
		"Sumar,restar,multiplicar y dividir"<<endl<<endl;
ingresa_opcion:

	//menu para elgir operacion
	cout<<"Ingresa el n\xa3mero de opcion correspondiente a la operacion que           quieres realizar:"<<endl;
	cout<<"1 - SUMAR"<<endl;
	cout<<"2 - RESTAR"<<endl;
	cout<<"3 - MULTIPLICAR"<<endl;
	cout<<"4 - DIVIDIR"<<endl<<endl;
	
	
	//defino variable que usa el usuario para introducir opcion
	int opcion=0;
	

	//introduce opcion el usuario
	cout<<"Tu opcion: ";
	cin>>opcion;
	

	char mensaje[]="";

	switch(opcion)
	{
	case 1:
		strcpy(mensaje,"Que n\xa3mero queres sumar?: ");
		break;
	case 2:
		strcpy(mensaje,"Que n\xa3mero queres restar?: ");
		break;
	case 3:
		strcpy(mensaje,"Que tabla queres multiplicar?: ");
		break;
	case 4:
		strcpy(mensaje,"Que n\xa3mero queres dividir?: ");
		break;
	default:
		goto ingresa_opcion;
		break;
	}
	cout<<endl<<mensaje<<endl<<endl;;
		
	return 0;
}
  #2 (permalink)  
Antiguo 28/02/2009, 13:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Error al seleccionar opcion

hmm puedes hacer dos cosas con lo de las letras o haces un manejo de exepciones con try catch o puedes invertarte algo con los valores en ascii

Código:
#include <iostream>
#include <string>

using namespace std;

int main()
{
	string mensaje;
	char a;
	
	do
	{
		cout << "Ingresa una opcion: ";
		cin >> a;

	}while((int)a < 49 || (int)a > 52);
	
	switch(a)
	{
		case '1':
			mensaje = "escogiste 1";
			break;
			
		case '2':
			mensaje = "escogiste 2";
			break;
			
		case '3':
			mensaje = "escogiste 3";
			break;
			
		case '4':
			mensaje = "escogiste 4";
			break;
			
		default:
			break;
			
	}
	
	cout << mensaje << endl;
	
	return 0;

}
P.D. Intenta eliminar los goto de tus programas, son malas maneras de programacion

Última edición por Tet0; 28/02/2009 a las 13:59
  #3 (permalink)  
Antiguo 04/03/2009, 17:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Error al seleccionar opcion

Mira, el codigo que posteaste anda bien, pero mientras le pases un solo caracter sea letra o numero, si le pasas un numero de un digito, todo bien, pero si tiene mas te toma solo el primer caracter(el de mas a la izquierda).
Te paso mi codigo renovado, pero sigue patinando cuando le pasas una letra.

Código:
int main()
{
	cout<<"Programa para realizar las cuatro operaciones basicas."<<endl<<
	"Sumar,restar,multiplicar y dividir"<<endl<<endl;

        //defino variable para salir del while
	bool salir=false;

	while(true)
	{		
		int opcion=menu();
		
		switch(opcion)
		{
		case 1:
			cout<<"Que n\xa3mero queres sumar?"<<endl<<endl;
			break;
		case 2:
			cout<<"Que n\xa3mero queres restar?"<<endl<<endl;
			break;
		case 3:
			cout<<"Que tabla queres multiplicar?"<<endl<<endl;
			break;
		case 4:
			cout<<"Que n\xa3mero queres dividir?"<<endl<<endl;
			break;
		case 5:
			salir=true;
			break;
		default:
			cout<<"Debes seleccionar una opcion"<<endl<<endl;
			break;
		}
		


		if(salir==true)
			break;

		
	
	}


	return 0;
}


int menu()
	{
		
		int opcion;

		//menu para elgir operacion
		cout<<"Ingresa el n\xa3mero de opcion correspondiente a la   operacion que quieres realizar:"<<endl;
		cout<<"1 - SUMAR"<<endl;
		cout<<"2 - RESTAR"<<endl;
		cout<<"3 - MULTIPLICAR"<<endl;
		cout<<"4 - DIVIDIR"<<endl<<endl;
		cout<<"5 - SALIR"<<endl<<endl;

		//introduce opcion el usuario
		cout<<"Tu opcion: ";
		cin>>opcion;

		return opcion;

	}
En donde muestro los mensajes le pienso poner llamadas a funciones.
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 11:31.