Menu string

Iniciado por mariano96, 24 Febrero 2015, 01:49 AM

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

mariano96

Hola, tengo una duda a la hora de hacer un menú que devuelva la opción elegida por el usuario: el problema es que tengo que hacer un do-while para que vaya verificando si la opción es correcta y hay opciones numéricas (1,2,3,etc) y una letra(q-para salir-).

string menu(){

   string opcion;

do{
   1-
   2-
   etc
   q-

}while(opcion.length()>1 || opcion[0]=='0' || (opcion[0]>'q' || opcion[0]<'q'));

}

Al teclear 0 o una letra distinta de 'q' sí que se repite el do-while, pero se repite al teclear un número del 1 al 9 y no quiero que ocurra eso. A ver si me podéis ayudar.
Gracias de antemano.

MellaSystems

mira este menu y dime si te parece correcto:

Código (cpp) [Seleccionar]

#include <iostream>

main(){
int OpcMen;
int sigue = 1;
do {
system("cls");
system("color 9F");
std::cout<<"\TITULO AQUI\n"<<std::endl;
std::cout<<"\t1.  "<<std::endl;
std::cout<<"\t2.  "<<std::endl;
std::cout<<"\t3.  "<<std::endl;
std::cout<<"\t0.  Pulse cero Salir"<<std::endl<<std::endl;
std::cout<<"\t    Ingrese su opci\242n: ";
       while(!(std::cin>>OpcMen))
          {
   std::cin.clear();
   std::string error;
   std::cin>>error;
           std::cout<<"\n\tLA OPCI\340N INGRESADA NO EXISTE"<<std::endl;
    std::cout<<"\n\tIngrese su opci\242n nuevamente: ";
          }
switch(OpcMen) {
case 1:
//lo que quieres que haga en esta opcion
break;
case 2:
//lo que quieres que haga en esta opcion
break;
case 3:
//lo que quieres que haga en esta opcion
break;
case 0:
sigue = 0;
break;
default:
std::cout<<"\t\tLA OPCI\340N INGRESADA NO EXISTE"<<std::endl;
   system("pause");
}
} while(sigue);
}


ese es un menu con do-while usando switch

rir3760

Cita de: mariano96 en 24 Febrero 2015, 01:49 AMtengo una duda a la hora de hacer un menú que devuelva la opción elegida por el usuario: el problema es que tengo que hacer un do-while para que vaya verificando si la opción es correcta y hay opciones numéricas (1,2,3,etc) y una letra(q-para salir-).
Solo tienes que leer la opción como un carácter, continuación realizas la operación correspondiente de acuerdo con el enunciado de tu programa, mas o menos así:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

int main()
{
   char opcion;
   bool salir;
   
   salir = false;
   do {
      cin >> opcion;
     
      switch (opcion){
      case '0':
         cout << "La opcion es 0" << endl;
         break;
      case '1':
         cout << "La opcion es 1" << endl;
         break;
      case '2':
         cout << "La opcion es 2" << endl;
         break;
      case 'q':
         cout << "La opcion es q" << endl;
         salir = true;
         break;
      default:
         cout << "Opcion no valida" << endl;
         break;
      }
   }while (!salir);
   
   return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

mariano96

Gracias por responder. Me sirvió.