Hola!
Tengo este código:
#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
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.
#include <cstdio>
int main()
{
printf("Hola!");
main();
return 0;
}
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
Pues quita el return, da igual, pero la solución es ésta...
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?
return main()
Yo para los menús usaría algo así como un bucle while, en el cuál salga cuando yo quiera con un bool.
#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)
}
¿Has probado return main(); ?
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:
int main();
Inicio:
....
....
goto Inicio;
Cita de: martin_poipon en 1 Julio 2011, 15:55 PM
No funciona, tira error al intentar compilar.
Lo de quitar el return, tampoco. Lo solucioné con esto:
int main();
Inicio:
....
....
goto Inicio;
Pues pon el error.. U_U
Es que eso de return main() no tiene sentido.
Te dijeron varias veces que lo mejor es un bucle con un while, y no puedes decir que lo solucionaste con un goto, cuando tu pregunta era precisamente hacer eso sin usar goto xD
Cita de: Acermax en 1 Julio 2011, 15:59 PM
Es que eso de return main() no tiene sentido.
Te dijeron varias veces que lo mejor es un bucle con un while, y no puedes decir que lo solucionaste con un goto, cuando tu pregunta era precisamente hacer eso sin usar goto xD
Tu si que no tienes sentido:
#include <stdio.h>
int main(){
char st[20];
printf("Escribe la palabra: ");
scanf("%s",&st);
printf("Has escrito %s \n", st);
return main();
}
No voy a entrar a discutir.
Ya dijeron arriba que hacer recursión sobre el main() no es recomendable, además que en un largo uso sobrecarga la memoria...
Por supuesto que sé que eso compila, pero un programa no es perfecto por el mero hecho de compilar.
Un saludo...
Cita de: Acermax en 1 Julio 2011, 16:16 PM
No voy a entrar a discutir.
Ya dijeron arriba que hacer recursión sobre el main() no es recomendable, además que en un largo uso sobrecarga la memoria...
Por supuesto que sé que eso compila, pero un programa no es perfecto por el mero hecho de compilar.
Un saludo...
Para ese programa creo qeu es una opción valida.
obviamente también puede usar while, ciclos, pero el user tiene la misma idea de programar C/C++ que de usar un F1, no sabe ni decirme el error que le tira algo que funciona correctamente. No le pidamos peras al olmo.
Si existen sentencias de control como while ¿para que hacer return main();?. Sinceramente creo que es mejor hacer uso de while que, me imagino, será más eficiente. Y por muy chorra que sea el programa si una persona que está "aprendiendo" a programar se le enseña que ,en vez de pensar un poco la lógica que debe seguir un programa, haga uso de go to y cosas similares pues... sinceramente me parece erróneo.
Eso sí, cada cual que haga lo que quiera.
Saludos.
Cita de: ハセヲ, en 1 Julio 2011, 16:24 PM
Para ese programa creo qeu es una opción valida.
obviamente también puede usar while, ciclos, pero el user tiene la misma idea de programar C/C++ que de usar un F1, no sabe ni decirme el error que le tira algo que funciona correctamente. No le pidamos peras al olmo.
:-\ :-\ :-\
Puedo usar while pero no quiero ._. a menos que sea la única opción. He puesto goto para tener una solución
temporal. Y sé como dar el error, lo que pasa es que no estaba en el PC cuando respondiste..
SI sé decir el error. Es este:
Marca la llave ({) de inicio de main() y dice: too few arguments to function `int main(int, char**)'
.
Si no quieres usar while for ni nada similar usa:
http://codepad.org/rbjReElT
#include <setjmp.h>
int main() {
int _i_jmp;
jmp_buf _jmpb_buf;
_i_jmp = setjmp( _jmpb_buf );
// Mas codigo..., si _i_jmp==0 es que setjmp() a fallado....
longjmp( _jmpb_buf , 1 );
return 0;
}
Dulces Lunas!¡.
Cita de: ハセヲ, en 1 Julio 2011, 15:13 PM
¿Has probado return main(); ?
Ahí tenes un problema. Si el programa genera mucho ciclos te quedas sin stack.
Lo mejor es un while(1) si es para siempre o preguntar.
char seguir;
prinft("desea seguir ?")
seguir=getchar();
Cita de: franeg95 en 3 Julio 2011, 05:53 AM
Ahí tenes un problema. Si el programa genera mucho ciclos te quedas sin stack.
Lo mejor es un while(1) si es para siempre o preguntar.
char seguir;
prinft("desea seguir ?")
seguir=getchar();
Sí, parece que nadie vió mi respuesta sobre el ciclo infinito. :/
@BlackZeroX: Es prácticamente lo mismo que un goto sólo que es (in)portable dentro de plataformas POSIX x'D
@martin_poipon: Ampliando lo que dice franeg95 -> https://duckduckgo.com/Stack_overflow
Saludos.