Título: AYUDA C++
Publicado por: Themegajordan en 24 Abril 2016, 20:35 pm
(http://i64.tinypic.com/208ekn7.jpg) Necesito ayuda por favor :( no se como hacer un menu de ociones para entrar a una opcion y luego a otra y finalmente a otra Hasta ahora he colocado esto: #include <iostream> #include <conio.h>
using namespace std;
int main(){ int opciones; cout << "TIPO DE FABRICANTE" << endl; cout << "================" << endl; cout << "1. Microsoft \n"; cout << "2. Apple" << endl; cout << "3. Linux" << endl; cout << "Ingrese su Opcion: "; cin >> opciones;
system("cls");
_getch(); return 0; }
Título: Ayuda con menus de opciones en C/C++
Publicado por: HardForo en 25 Abril 2016, 04:02 am
Hay un tema con un pin sobre menus, sin embargo te voy a dar una respuesta: Puedes hacer algo muy simple asi: #include <iostream> #include <conio.h> using namespace std; int main(){ char op[2]; while (op[0]!='0'){ cout << "TIPO DE FABRICANTE" << endl << "================" << endl << "1. Microsoft" << endl << "2. Apple" << endl << "3. Linux" << endl << endl << "Ingrese su Opcion: "; cin >> op; printf ("\nHas seleccionado %c\n\n",op[0]); getchar(); } getchar(); return 0; }
Título: Re: AYUDA C++
Publicado por: MAFUS en 26 Abril 2016, 01:03 am
Lástima que el trabajo sea en C++, porqué sé muy poco de ese lenguaje, pero aquí te enseño un código en C el cuál tienes los datos separados de la lógica, una función menú genérica y un main limpio. #include <stdio.h> #include <stdlib.h> #include <ctype.h> /* Estas tablas facilitan los posteriores cambios en las opciones */ /* En las opciones de menú poner siempre al final un NULL, ya que * es lo que espera la función para trabajar con estos argumentos. */ const char *fabricantes[] = {"Microsoft", "Apple", "Linux", NULL}; const char *productos[] = {"Sistema operativo", "Lenguaje de programación", NULL}; const char *dispositivo[] = {"Celulares", "Tablas", "Otros", NULL}; const int precios_microsoft[] = { /* Sistema operativo */ 1500, /* Lenguaje de Programación */ /* Celulares */ 1800, /* Tablas */ 1200, /* Otros */ 900}; const int precios_apple[] = { /* Sistema operativo */ 2500, /* Lenguaje de Programación */ /* Celulares */ 1900, /* Tablas */ 1800, /* Otros */ 1600}; const int precios_linux[] = { /* Sistema operativo */ 1000, /* Lenguaje de Programación */ /* Celulares */ 100, /* Tablas */ 150, /* Otros */ 50}; int menu(const char *titulo, const char *empresa, const char **opciones) { int i = 0; int respuesta; do { /* Imprimiendo el título del menú */ if(empresa) /* Imprimiendo opciones del menú */ while(opciones[i] != NULL) { printf(" %2i. %s\n", i + 1, opciones [i ]); ++i; } --i; /* Adquiriendo la opción deseada */ /* Control de errores de la entrada por teclado */ respuesta -= '0' + 1; else respuesta = -1; if(respuesta > i) respuesta = -1; if(respuesta == -1) { i = 0; printf("*** OPCION INCORRECTA ***\n"); } } while(respuesta == -1); /* Un poco bonito, que también puede formar parte del menú... */ /* Devuelvo la opción elegida */ return respuesta; } int main() { int respuesta; const char *fabricante; const int *lista_de_precios; respuesta = menu("Elija fabricante", NULL, fabricantes); fabricante = fabricantes[respuesta]; switch(respuesta) { case 0: lista_de_precios = precios_microsoft; break; case 1: lista_de_precios = precios_apple; break; case 2: lista_de_precios = precios_linux; break; } respuesta = menu("Elija el producto de", fabricante, productos); if(respuesta == 1) respuesta = menu("Elija el dispositivo de", fabricante, dispositivo) + 1; printf("El precio del producto es: %i", lista_de_precios [respuesta ]); return 0; }
Título: Re: AYUDA C++
Publicado por: HardForo en 26 Abril 2016, 01:27 am
respuesta = menu("Elija fabricante", NULL, fabricantes); fabricante = fabricantes[respuesta];
El problema de esa implementacion @MAFUS es que no tienes una forma de salir de esos bucles, por lo demas muy bien.
Título: Re: AYUDA C++
Publicado por: MAFUS en 26 Abril 2016, 01:35 am
No entiendo esa afirmación :-(
Título: Re: AYUDA C++
Publicado por: HardForo en 26 Abril 2016, 01:42 am
Como sale tu programa (de un bucle infinito de opciones) de un menu o un submenu ?
No hay una opcion 'salir' que serviria para salir de un sub-menu o salir del programa segun donde te encuentres. Tu programa solo puede ir en una dirección y asi no funciona ningun sistema.
Pero no lo tomes a mal, es solo un detalle que puedes arreglar en 1 o 2 linea seguro.
Título: Re: AYUDA C++
Publicado por: MAFUS en 26 Abril 2016, 01:45 am
No es infinito. Pruébalo :)
Título: Re: AYUDA C++
Publicado por: HardForo en 26 Abril 2016, 01:57 am
Creo que no me entiendes @MAFUS :huh: C:\C>menu_mafus
Elija fabricante :
1. Microsoft 2. Apple 3. Linux
Opcion >> 0 *** OPCION INCORRECTA ***
Elija fabricante :
Opcion >>
*** OPCION INCORRECTA ***
Elija fabricante :
Opcion >>
*** OPCION INCORRECTA ***
Cual se supone es la forma de salir de ahi ? y si sales .... entonces que asignas cuando haces.... fabricante = fabricantes[respuesta];
Basura ? accedes con cualquier banana a un array fabricantes ? :silbar: (en caso de que puedas salir, claro) Como te decia.... es facil cambiar eso: tienes que tener una opcion que sea de salida y ademas tienes que acceder a un array primero habiendo chequeado el indice es valido
Título: Re: AYUDA C++
Publicado por: MAFUS en 26 Abril 2016, 02:04 am
Podría poner una opción para salir si no se quisiera marcar un fabricante o uno de los productos en posterioridad. Pero ya es muy tarde, las 2 de la mañana :laugh:. Eso sí, el programa te dejará seguir si eliges una opción correcta.
Título: Re: AYUDA C++
Publicado por: HardForo en 26 Abril 2016, 16:43 pm
Con objetos todo es más fácil.... el código queda muy simple .. solo mirar el main() ;) Si queremos crear el menu de empresas tecnologicas: Menu m = Menu("OS"); m.set_option("Windows"); m.set_option("Mac OS"); m.set_option("Linux");
O.. Menu m; m.set_title("OS"); m.set_option("Windows"); m.set_option("Mac OS"); m.set_option("Linux");
Por supuesto el titulo es opcional, pero especificar las teclas asignadas a cada opcion a veces no es opcional: Menu m = Menu("Frutas"); m.set_option("Mango"); m.set_option("Mandarina",'N'); m.set_option("Manzana",'A'); m.set_option("Peras");
y nada quita que uses numeros como letras: Menu m = Menu("Frutas"); m.set_option("Mango",'1'); m.set_option("Mandarina",'2'); m.set_option("Manzana",'3'); m.set_option("Peras",'4');
He habilitado 3 modos distintos de "enumeracion" a saber : NUMERICO, ALFABETICO y AUTO; se eligen en el constructor Dejo el codigo completo aqui (http://hardforo.com/thread-180-post-485.html)
|