[Lenguaje C] Volver al menu principal

Iniciado por Whiteseba, 3 Marzo 2012, 09:38 AM

0 Miembros y 2 Visitantes están viendo este tema.

Whiteseba

Hola, soy nuevo en el foro y tambien nuevo en la programacion. Vi algunas cosas en la escuela y hoy quise recordarlas y ponerme a tono ya que en esta semana empiezo de vuelta el ultimo año de la carrera y no quiero olvidarme.
Hice una calculadora de valores de resistencias (electronica), el proceso lo hace todo bien sin ningun error, pero lo que quiero es que despues de que termine de calcular una resistencia pueda volver al primer menu. Esta todo hecho con switchs, aca les dejo el codigo

#include <stdio.h>
#include <stdlib.h>

int main()
{  int color1;
   int color2;
   int color3;
   int opcion;
   printf("0) Negro\n 1) Marron\n 2) Rojo\n 3) Naranja\n 4) Amarillo\n 5) Verde\n 6) Azul\n 7) Violeta\n 8) Gris\n 9) Blanco\n");
   printf("\n");
   scanf("%d",&color1);
   switch(color1){
case 0:
color1 = 0;
printf("\n");
printf("El primer color seleccionado es el Negro\n");
break;

case 1:
color1 = 1;
printf("\n");
printf("El primer color seleccionado es el Marron\n");
break;

case 2:
color1 = 2;
printf("\n");
printf("El primer color seleccionado es el Rojo\n");
break;

case 3:
color1 = 3;
printf("\n");
printf("El primer color seleccionado es el Naranja\n");
break;

case 4:
color1 = 4;
printf("\n");
printf("El primer color seleccionado es el Amarillo\n");
break;

case 5:
color1 = 5;
printf("\n");
printf("El primer color seleccionado es el Verde\n");
break;

case 6:
color1 = 6;
printf("\n");
printf("El primer color seleccionado es el Azul\n");
break;

case 7:
color1 = 7;
printf("\n");
printf("El primer color seleccionado es el Violeta\n");
break;

case 8:
color1 = 8;
printf("\n");
printf("El primer color seleccionado es el Gris\n");
break;

case 9:
color1 = 9;
printf("\n");
printf("El primer color seleccionado es el Blanco\n");
break;
}
printf("\n");
printf("0) Negro\n 1) Marron\n 2) Rojo\n 3) Naranja\n 4) Amarillo\n 5) Verde\n 6) Azul\n 7) Violeta\n 8) Gris\n 9) Blanco\n");
printf("\n");
scanf("%d",&color2);
switch(color2){
case 0:
color2 = 0;
printf("\n");
printf("El segundo color seleccionado es el Negro\n");
break;

case 1:
color2 = 1;
printf("\n");
printf("El segundo color seleccionado es el Marron\n");
break;

case 2:
color2 = 2;
printf("\n");
printf("El segundo color seleccionado es el Rojo\n");
break;

case 3:
color2 = 3;
printf("\n");
printf("El segundo color seleccionado es el Naranja\n");
break;

case 4:
color2 = 4;
printf("\n");
printf("El segundo color seleccionado es el Amarillo\n");
break;

case 5:
color2 = 5;
printf("\n");
printf("El segundo color seleccionado es el Verde\n");
break;

case 6:
color2 = 6;
printf("\n");
printf("El segundo color seleccionado es el Azul\n");
break;

case 7:
color2 = 7;
printf("\n");
printf("El segundo color seleccionado es el Violeta\n");
break;

case 8:
color2 = 8;
printf("\n");
printf("El segundo color seleccionado es el Gris\n");
break;

case 9:
color2 = 9;
printf("\n");
printf("El segundo color seleccionado es el Blanco\n");
break;
}
printf("\n");
printf("0) Negro\n 1) Marron\n 2) Rojo\n 3) Naranja\n 4) Amarillo\n 5) Verde\n 6) Azul\n 7) Violeta\n 8) Gris\n 9) Blanco\n");
printf("\n");
scanf("%d",&color3);
switch(color3){
case 0:
printf("\n");
printf("La resistencia tiene un valor de %d%d Ohm",color1,color2);
break;

case 1:
color3 = 0;
printf("\n");
printf("La resistencia tiene un valor de %d%d%d Ohm",color1,color2,color3);
break;

case 2:
color3 = ("00");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 3:
color3 = ("000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 4:
color3 = ("0000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 5:
color3 = ("00000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 6:
color3 = ("000000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 7:
color3 = ("0000000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 8:
color3 = ("00000000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;

case 9:
color3 = ("000000000");
printf("\n");
printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
break;}

printf("\n");

printf("\n");
printf("Deseas volver al menu principal?\n 1. Si\n 2. No\n");
scanf("%d",opcion);
return 0;
}


Como veran, despues del scanf("%d,opcion); no hay nada, porque no se que poner para poder volver al primer printf

Alguien que me ayude se lo agradeceria muchisimo

elgeneradordenvolupant

Yo probaría con do...while para crear un bucle.

anonimo12121

Yo te recomendaría que uses funciones y sentencias if
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

armizh

Cita de: Dr.Hacker++ en  3 Marzo 2012, 16:06 PM
Yo te recomendaría que uses funciones y sentencias if

Seria un desperdicio ocupar un if...else porque esta analizando siempre la misma variable en ambos casos.

Yo de verdad te recomendaria ocupar las etiquetas GeSHi con resaltado para cpp xd
Luego de donde dice "code" le agregas "=cpp" o "=c", todo dentro de los corchetes.

Para hacer lo del menu principal debes usar un while(1), que espera a que 1 = 0 o se rompa con el bucle, y cuando se elija salir, haces un break, o tambien creas una variable int, te lo explico.

int salir = 0;
while(salir) {
        /* Aca va el codigo */
        if(variable_de_eleccion_del_menu==valor_para_salir) salir++;
}

Y con eso haces un bucle que te mantenga en el programa hasta que el usuario quiera salir.
Tambien he visto esto:
while(1) {
/* Aca va el codigo */
        if(variable_de_eleccion_del_menu==valor_para_salir) break;
}

Pero no recuerdo si este ultimo era en C o en alguna de sus variantes, yo prefiero usar la primera opcion que di.

Saludos
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

Whiteseba

Cita de: armizh en  3 Marzo 2012, 17:50 PM
Seria un desperdicio ocupar un if...else porque esta analizando siempre la misma variable en ambos casos.

Yo de verdad te recomendaria ocupar las etiquetas GeSHi con resaltado para cpp xd
Luego de donde dice "code" le agregas "=cpp" o "=c", todo dentro de los corchetes.

Para hacer lo del menu principal debes usar un while(1), que espera a que 1 = 0 o se rompa con el bucle, y cuando se elija salir, haces un break, o tambien creas una variable int, te lo explico.

int salir = 0;
while(salir) {
        /* Aca va el codigo */
        if(variable_de_eleccion_del_menu==valor_para_salir) salir++;
}

Y con eso haces un bucle que te mantenga en el programa hasta que el usuario quiera salir.
Tambien he visto esto:
while(1) {
/* Aca va el codigo */
        if(variable_de_eleccion_del_menu==valor_para_salir) break;
}

Pero no recuerdo si este ultimo era en C o en alguna de sus variantes, yo prefiero usar la primera opcion que di.

Saludos

Ese codigo que me decis es para salir del programa solamente no? Porque yo quiero que al apretar un 1 vuelva al primer printf que me da los primero colores

armizh

Ese codigo que te digo te mantiene en el programa con un bucle infinito a menos que el usuario decida salir, es decir, cada vez que termine de ejecutarse el codigo le "preguntas" al usuario si desea salir.
Algo asi como esto:
int salir = 0;
while(salir) {
        /*        ...        */
        printf("Desea realizar otra operacion? [s/n] ");
        char *resp;
        getchar(resp);
        if(strcmp(res,"s")!=0) salir++;
}
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

Whiteseba

Gracias por las respuestas, al final lo pude solucionar con un while =D

rir3760

Hay dos errores en tu fragmento de código.

* Si se utiliza una variable como bandera para controlar (y eventualmente terminar) un bucle "while" esta debe iniciar con un valor distinto de cero (si no es así nunca entraría en el bucle).

* No es necesario utilizar un puntero a carácter y este inicia con un valor "no definido".

Y para la comparación basta con utilizar el operador de comparación (el "==").

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

armizh

Cita de: rir3760 en  4 Marzo 2012, 02:15 AM
* No es necesario utilizar un puntero a carácter y este inicia con un valor "no definido".

Y para la comparación basta con utilizar el operador de comparación (el "==").
No es necesario en caso que se utilice otra forma para manejar, por ejemplo, en el menu principal utilizar una orden para terminar el programa, en cualquier caso esto lo puse como ejemplo para explicar y no me detuve en revisar los errores. Para la comparacion basta con un == si es un char, pero podriamos usar scanf (o talvez vez sea mejor idea utilizar fscanf) para almacenar una cadena en caso de que se requiera.
Por cierto, gracias por las correciones.

Saludos
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

Eternal Idol

armizh: revisa el codigo que dejas, no sirve de nada pretender ayudar (O FIGURAR EN EL FORO) de esta manera.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón