AYUDA C++

Iniciado por Themegajordan, 24 Abril 2016, 20:35 PM

0 Miembros y 1 Visitante están viendo este tema.

Themegajordan




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;
}

HardForo

#1
Hay un tema con un pin sobre menus, sin embargo te voy a dar una respuesta:

Puedes hacer algo muy simple asi:

Código (cpp) [Seleccionar]

#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;
}


HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

#2
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;
}

HardForo

#3
   
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.
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

No entiendo esa afirmación :-(

HardForo

#5
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.
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

No es infinito. Pruébalo :)

HardForo

#7
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
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

MAFUS

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.

HardForo

#9
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:

Código (cpp) [Seleccionar]

Menu m = Menu("OS");
m.set_option("Windows");
m.set_option("Mac OS");
m.set_option("Linux");


O..

Código (cpp) [Seleccionar]

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:


Código (cpp) [Seleccionar]

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:

Código (cpp) [Seleccionar]

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
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *