(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;
}
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;
}
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ú */
printf("%s ", titulo);
if(empresa)
printf("%s", empresa);
printf(":\n\n");
/* Imprimiendo opciones del menú */
while(opciones[i] != NULL) {
printf(" %2i. %s\n", i + 1, opciones[i]);
++i;
}
--i;
/* Adquiriendo la opción deseada */
printf("\n Opcion >> ");
respuesta = getchar();
/* Control de errores de la entrada por teclado */
while(getchar() != '\n');
if(isdigit(respuesta))
respuesta -= '0' + 1;
else
respuesta = -1;
if(respuesta > i)
respuesta = -1;
if(respuesta == -1) {
i = 0;
printf("*** OPCION INCORRECTA ***\n");
while(getchar() != '\n');
}
} while(respuesta == -1);
/* Un poco bonito, que también puede formar parte del menú... */
putchar('\n');
/* 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;
}
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.
No entiendo esa afirmación :-(
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.
No es infinito. Pruébalo :)
Creo que no me entiendes @MAFUS :huh:
Citar
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
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.
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)