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

Problema con un bucle en C

Estas en el tema de Problema con un bucle en C en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/10/2008, 13:02
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 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;
							
					}	
				}
			}	
}
  #2 (permalink)  
Antiguo 26/10/2008, 04:03
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
De acuerdo Respuesta: Problema con un bucle en C

ya conseguí solucionarlo , gracias de todas formas! cuelgo el codigo nuevo por si alguien le habia estado dando vueltas a ver donde podía estar el error!

Código:
#include <stdio.h>

int main()
{
	int opcion, accion;
	int cont=0;
	int counter=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 && opcion!=0 && counter<1)
		{
			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);
								counter++;
								if(accion>3)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								else
									switch(accion)
									{
										case 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);
												counter--;
												break;
									
										case 1: printf("\n\tHa elegido \"ANADIR USUARIO\"\n\n");
												break;
										
										case 2: printf("\n\tHa elegido \"MOSTRAR DATOS DEL USUARIO\"\n\n");
												break;

										case 3: printf("\n\tHa elegido \"MODIFICAR DATOS DEL USUARIO\"\n\n");
												break;
									}			
								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);
								counter++;
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								else
									switch(accion)
									{

										case 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);
												counter--;
												break;

										case 1:	printf("\n\tHa elegido \"ANADIR PUNTO DE INTERES\"\n\n");
												break;

										case 2: printf("\n\tHa elegido \"MOSTRAR DATOS DE LOS PUNTOS DE INTERES\"\n\n");
												break;

										case 3:	printf("\n\tHa elegido \"MODIFICAR DATOS DE LOS PUNTOS DE INTERES\"\n\n");
												break;

										case 4:	printf("\n\tHa elegido \"ELIMINAR PUNTO DE INTERES\"\n\n");
												break;
									}
								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);
								counter++;
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								else
									switch(accion)
									{
										case 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);
												counter--;
												break;
								
										case 1:	printf("\n\tHa elegido \"ANADIR PARADA\"\n\n");
												break;
									
										case 2:	printf("\n\tHa elegido \"MOSTRAR DATOS DE PARADA\"\n\n");
												break;
										
										case 3:	printf("\n\tHa elegido \"MODIFICAR DATOS DE PARADA\"\n\n");
												break;
											
										case 4:	printf("\n\tHa elegido \"ELIMINAR PARADA\"\n\n");
												break;
									}
								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);
								counter++;
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								else
									switch(accion)
									{
										case 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);
												counter--;
												break;
										
										case 1:	printf("\n\tHa elegido \"ANADIR TRANSBORDO\"\n\n");
												break;
									
										case 2:	printf("\n\tHa elegido \"MOSTRAR DATOS DE TRANSBORDO\"\n\n");
												break;
										
										case 3:	printf("\n\tHa elegido \"MODIFICAR DATOS DE TRANSBORDO\"\n\n");
												break;
											
										case 4:	printf("\n\tHa elegido \"ELIMINAR TRANSBORDO\"\n\n");
												break;
									}
								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);
								counter++;
								if(accion>4)
								{
									printf("\n\tSe ha producido un error, por favor vuelva a elegir una opcion: ");
									scanf("%d", &accion);
								}
								else
									switch(accion)
									{
										case 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);
												counter--;
												break;
								
										case 1:	printf("\n\tHa elegido \"ANADIR LINEA\"\n\n");
												break;
										
										case 2:	printf("\n\tHa elegido \"MOSTRAR DATOS DE LINEA\"\n\n");
												break;
											
										case 3:	printf("\n\tHa elegido \"MODIFICAR DATOS DE LINEA\"\n\n");
												break;
										
										case 4:	printf("\n\tHa elegido \"ELIMINAR LINEA\"\n\n");
												break;
									}
								break;	
			}
		}
		if(opcion==0 && cont<1)
		{
			printf("\n\n\tLa operacion ha sido abortada\n\n");
			cont++;
		}
}
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 09:17.