Volver al menú principal sin usar goto

Iniciado por martin_poipon, 30 Junio 2011, 21:52 PM

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

martin_poipon

Hola!

Tengo este código:
Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>

using namespace std;

void pMenu();

int main(int argc, char *argv[])
{
    char opcion;
    //Valores bucle FOR
    int vInicial;
    int vFinal;
    int Paso;
    //Valores bucle WHILE
    int Y;
    int Z;
    //Imprimir menú
    pMenu();
    cin >> opcion;
    switch(opcion)
    {
                  case '1':
                       system("CLS");
                       cout << "Valor inicial del bucle:\r\n";
                       cin >> vInicial;
                       system("CLS");
                       cout << "Valor final del bucle:\r\n";
                       cin >> vFinal;
                       system("CLS");
                       cout << "Paso: (suma)\r\n";
                       cin >> Paso;
                       for(int i=vInicial;i<=vFinal;i=i+Paso)
                               {
                                                              cout << i;
                               }
                       break;
                  case '2':
                       system("CLS");
                       cout << "Mientras que Y <= Z (mientras\r\nque Y sea igual o mayor que Z), escribe el valor de Y:";
                       cin >> Y;
                       system("CLS");
                       cout << "Escribe el valor de Z:";
                       cin >> Z;
                       system("CLS");
                       cout << "Paso:";
                       cin >> Paso;
                       system("CLS");
                       while(Y<=Z)
                       {
                                 Y+=Paso;
                       }
                       break;
                  case '3':
                       system("CLS");
                       cout << "system(\"PAUSE\"); funciona así:";
                       system("PAUSE");
                       break;
                  case '4':
                       system("CLS");
                       cout << "system(\"PAUSE>NUL\") funciona así: (presiona\r\n alguna tecla para salir)";
                       system("PAUSE>NUL");
                       break;
                       
                  default:
                          cout << "La opción seleccionada no es válida.";
                          system("PAUSE");
                          break;
    }
    return EXIT_SUCCESS;
}

void pMenu()
{
    cout << "            BIENVENIDO            \r\n\r\n";
    cout << "Escoge una opción:\r\n";
    cout << "1.- Bucle \"for\" de X a Y\r\n";
    cout << "2.- Bucle \"while\" de X a Y\r\n";
    cout << "3.- system(\"PAUSE\")\r\n";
    cout << "4.- system(\"PAUSE>NUL\")\r\n";
}


¿Cómo hago para que, después de hacer todo lo del switch, vuelva a empezar por int main()?

PD: Acepto críticas y sugerencias sobre el código, pues es mi primer código que funciona ;D
BiQuad! - Inteligencia Virtual
[X] Tener una web con el script
[] Tener más de 100 posts
[] Tener más de 100 miembros
Host: byethost (gratis)

madpitbull_99

Creo que con algo así, serviría:


int main(int argc, char *argv[]) {

char continue = 'c';

  while(continue == 'c'){

      //Aqui van las instrucciones


       system("pause");
       cout << "Pasa salir pulsa X . Si deseas seguir, pulsa C : ";
       cin >>continue;
       //Si se introduce C, las instrucciones se vuelven a ejecutar

  }
}



Si esto es lo que quieres, asegurate de cambiar system("pause") por otra cosa.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

Queta

Código (cpp) [Seleccionar]
#include <cstdio>

int main()
{
printf("Hola!");

main();

return 0;
}
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

martin_poipon

Lo siento, pero no funciona el return 0;
Y lo de 'C', no es eso lo que quiero, quiero que, al llegar al break; y salir del switch(), que vaya de nuevo a int main() y que empieza a leer todo de nuevo.

Gracias
BiQuad! - Inteligencia Virtual
[X] Tener una web con el script
[] Tener más de 100 posts
[] Tener más de 100 miembros
Host: byethost (gratis)

Queta

Pues quita el return, da igual, pero la solución es ésta...
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

leogtz

Cita de: Queta en  1 Julio 2011, 00:06 AM
Pues quita el return, da igual, pero la solución es ésta...

No es buena costumbre usar recursión con main(), los nuevos estándares no lo

¿por qué no usas un ciclo infinito?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com


hari

#7
Yo para los menús usaría algo así como un bucle while, en el cuál salga cuando yo quiera con un bool.

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main(){
  bool salir = false;
  char eleccion;
 
  do{ //(While (!salir)
     cout << "Escoja una opción" << endl;
     cin >> eleccion;
     //Aquí irían todas tus opciones con un switch case ó con un if else
     //Te pongo el ejemplo con un if else
     if(eleccion == s)
        salir == true;
     else if(eleccion == p){
        cout << "Has tecleado la letra P" << endl;
        //Aquí podrías poner todo el código que quisieses cuando teclea P, al terminar volverá al menú
        }
  }while(!salir)
}


тαптяα


martin_poipon

Cita de: ハセヲ, en  1 Julio 2011, 15:13 PM
¿Has probado return main(); ?

No funciona, tira error al intentar compilar.
Lo de quitar el return, tampoco. Lo solucioné con esto:
Código (cpp) [Seleccionar]
int main();
Inicio:
....
....
goto Inicio;
BiQuad! - Inteligencia Virtual
[X] Tener una web con el script
[] Tener más de 100 posts
[] Tener más de 100 miembros
Host: byethost (gratis)