Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/10/2008, 13:02
Avatar de calathea
calathea
 
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 16 años, 2 meses
Puntos: 3
Exclamación Problema con un bucle en C

Hola! Estoy intentando crear un programa que me lea un menu. Como el menú es muy largo lo he dividido: he puesto un menu principal con varias opciones, dentro de las cuales he incluido las opciones relacionadas.

El problema que tengo es que al intentar abrir el menu con un bucle, no me funcionan varias cosas, a pesar de no darme ningun error:
  • si introduzco un numero mayor que el de las opciones que tengo, se imprime en pantalla la frase que he seleccionado, pidiendo otra vez el numero, pero luego no se reengancha al bucle
  • si introduzco un numero que corresponda a una opcion del menu, me aparece el submenu asociado; elijo una opcion dentro de ese submenu, y me devuelve siempre la frase seleccionada para el caso en el que se elige la opcion 1...y ademas vuelve a pedir que elijamos opcion, a pesar de que hay un break

Os adjunto el código, a ver si alguien puede ayudarme, por favor!



Código:
#include <stdio.h>

int main()
{
	int opcion, accion;
	int cont=0;

	printf("\n\n\t0.\tCancelar operacion");

	printf("\n\n\t1.\tUsuario");
	
	printf("\n\n\t2.\tPuntos de interes");
	
	printf("\n\n\t3.\tParadas");
	
	printf("\n\n\t4.\tTransbordos");
	
	printf("\n\n\t5.\tLineas");
		
	printf("\n\n\n\tIntroduzca el numero de la accion que desea realizar: ");
	scanf("%d", &opcion);

	if(opcion>5)
			{
				printf("\n\n\tSe ha producido un error, por favor vuelva a introducir el numero de la accion que desea realizar: ");
				scanf("%d", &opcion);
			}
	else

		while(opcion<=5)
		{
			if(opcion==0)
			{
				printf("\n\n\tLa operacion ha sido abortada\n\n");
				cont++;
					if(cont=1)
						break;
			}
			else
				while(opcion!=0)
				{		
					switch(opcion)
					{
						case 1: printf("\n\n\t0.\tVolver");
								printf("\n\t1.\tAnadir usuario");
								printf("\n\t2.\tMostrar datos del usuario");
								printf("\n\t3.\tModificar datos del usuario");
								printf("\n\n\tElija una opcion: ");
								scanf("%d", &accion);
								if(accion>3)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								if(accion=0)
								{
									printf("\n\n\t0.\tCancelar operacion");
									printf("\n\n\t1.\tUsuario");
									printf("\n\n\t2.\tPuntos de interes");
									printf("\n\n\t3.\tParadas");
									printf("\n\n\t4.\tTransbordos");
									printf("\n\n\t5.\tLineas");
									printf("\n\n\n\tIntroduzca el numero de la accion que desea realizar: ");
									scanf("%d", &opcion);
								}
								else
									if(accion=1)
										printf("\n\tHa elegido \"ANADIR USUARIO\"\n\n");
									else
										if(accion=2)
											printf("\n\tHa elegido \"MOSTRAR DATOS DEL USUARIO\"\n\n");
										else
											if(accion=3)
												printf("\n\tHa elegido \"MODIFICAR DATOS DEL USUARIO\"\n\n");
								break;	
							
						case 2: printf("\n\n\t0.\tVolver");
								printf("\n\t1.\tAnadir puntos de interes");
								printf("\n\t2.\tMostrar datos de los puntos de interes");
								printf("\n\t3.\tModificar puntos de interes");
								printf("\n\t4.\tEliminar punto de interes");
								printf("\n\n\tElija una opcion: ");
								scanf("%d", &accion);
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								if(accion=0)
								{
									printf("\n\n\t0.\tCancelar operacion");
									printf("\n\n\t1.\tUsuario");
									printf("\n\n\t2.\tPuntos de interes");
									printf("\n\n\t3.\tParadas");
									printf("\n\n\t4.\tTransbordos");
									printf("\n\n\t5.\tLineas");
									printf("\n\n\n\tIntroduzca el numero de la accion que desea realizar: ");
									scanf("%d", &opcion);
								}
								else
									if(accion=1)
										printf("\n\tHa elegido \"ANADIR PUNTO DE INTERES\"\n\n");
									else
										if(accion=2)
											printf("\n\tHa elegido \"MOSTRAR DATOS DE LOS PUNTOS DE INTERES\"\n\n");
										else
											if(accion=3)
												printf("\n\tHa elegido \"MODIFICAR DATOS DE LOS PUNTOS DE INTERES\"\n\n");
											else
												if(accion=4)
													printf("\n\tHa elegido \"ELIMINAR PUNTO DE INTERES\"\n\n");
								break;
							
						case 3: printf("\n\n\t0.\tVolver");
								printf("\n\t1.\tAnadir parada");
								printf("\n\t2.\tMostrar datos de parada");
								printf("\n\t3.\tModificar datos de parada");
								printf("\n\t4.\tEliminar parada");
								printf("\n\n\tElija una opcion: ");
								scanf("%d", &accion);
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								if(accion=0)
								{
									printf("\n\n\t0.\tCancelar operacion");
									printf("\n\n\t1.\tUsuario");
									printf("\n\n\t2.\tPuntos de interes");
									printf("\n\n\t3.\tParadas");
									printf("\n\n\t4.\tTransbordos");
									printf("\n\n\t5.\tLineas");
									printf("\n\n\n\tIntroduzca el numero de la accion que desea realizar: ");
									scanf("%d", &opcion);
								}
								else
									if(accion=1)
										printf("\n\tHa elegido \"ANADIR PARADA\"\n\n");
									else
										if(accion=2)
											printf("\n\tHa elegido \"MOSTRAR DATOS DE PARADA\"\n\n");
										else
											if(accion=3)
												printf("\n\tHa elegido \"MODIFICAR DATOS DE PARADA\"\n\n");
											else	
												if(accion=4)
													printf("\n\tHa elegido \"ELIMINAR PARADA\"\n\n");
								break;	
							
						case 4: printf("\n\n\t0.\tVolver");
								printf("\n\t1.\tAnadir transbordo");
								printf("\n\t2.\tMostrar datos de transbordo");
								printf("\n\t3.\tModificar datos de transbordo");
								printf("\n\t4.\tEliminar transbordo");
								printf("\n\n\tElija una opcion: ");
								scanf("%d", &accion);
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								if(accion=0)
								{
									printf("\n\n\t0.\tCancelar operacion");
									printf("\n\n\t1.\tUsuario");
									printf("\n\n\t2.\tPuntos de interes");
									printf("\n\n\t3.\tParadas");
									printf("\n\n\t4.\tTransbordos");
									printf("\n\n\t5.\tLineas");
									printf("\n\n\n\tIntroduzca el numero de la accion que desea realizar: ");
									scanf("%d", &opcion);
								}	
								else
									if(accion=1)
										printf("\n\tHa elegido \"ANADIR TRANSBORDO\"\n\n");
									else
										if(accion=2)
											printf("\n\tHa elegido \"MOSTRAR DATOS DE TRANSBORDO\"\n\n");
										else
											if(accion=3)
												printf("\n\tHa elegido \"MODIFICAR DATOS DE TRANSBORDO\"\n\n");
											else	
												if(accion=4)
													printf("\n\tHa elegido \"ELIMINAR TRANSBORDO\"\n\n");
								break;	
								
						case 5: printf("\n\n\t0.\tVolver");
								printf("\n\t1.\tAnadir linea");
								printf("\n\t2.\tMostrar datos de linea");
								printf("\n\t3.\tModificar datos de linea");
								printf("\n\t4.\tEliminar linea");
								printf("\n\n\tElija una opcion: ");
								scanf("%d", &accion);
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								if(accion=0)
								{
									printf("\n\n\t0.\tCancelar operacion");
									printf("\n\n\t1.\tUsuario");
									printf("\n\n\t2.\tPuntos de interes");
									printf("\n\n\t3.\tParadas");
									printf("\n\n\t4.\tTransbordos");
									printf("\n\n\t5.\tLineas");
									printf("\n\n\n\tIntroduzca el numero de la accion que desea realizar: ");
									scanf("%d", &opcion);
								}
								else
									if(accion=1)
											printf("\n\tHa elegido \"ANADIR LINEA\"\n\n");
										else
											if(accion=2)
												printf("\n\tHa elegido \"MOSTRAR DATOS DE LINEA\"\n\n");
											else
												if(accion=3)
													printf("\n\tHa elegido \"MODIFICAR DATOS DE LINEA\"\n\n");
												else
													if(accion=4)
														printf("\n\tHa elegido \"ELIMINAR LINEA\"\n\n");
								break;
							
					}	
				}
			}	
}