Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Whiteseba en 3 Marzo 2012, 09:38 am



Título: [Lenguaje C] Volver al menu principal
Publicado por: Whiteseba en 3 Marzo 2012, 09:38 am
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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {  int color1;
  6.    int color2;
  7.    int color3;
  8.    int opcion;
  9.    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");
  10.    printf("\n");
  11.    scanf("%d",&color1);
  12.    switch(color1){
  13. case 0:
  14. color1 = 0;
  15. printf("\n");
  16. printf("El primer color seleccionado es el Negro\n");
  17. break;
  18.  
  19. case 1:
  20. color1 = 1;
  21. printf("\n");
  22. printf("El primer color seleccionado es el Marron\n");
  23. break;
  24.  
  25. case 2:
  26. color1 = 2;
  27. printf("\n");
  28. printf("El primer color seleccionado es el Rojo\n");
  29. break;
  30.  
  31. case 3:
  32. color1 = 3;
  33. printf("\n");
  34. printf("El primer color seleccionado es el Naranja\n");
  35. break;
  36.  
  37. case 4:
  38. color1 = 4;
  39. printf("\n");
  40. printf("El primer color seleccionado es el Amarillo\n");
  41. break;
  42.  
  43. case 5:
  44. color1 = 5;
  45. printf("\n");
  46. printf("El primer color seleccionado es el Verde\n");
  47. break;
  48.  
  49. case 6:
  50. color1 = 6;
  51. printf("\n");
  52. printf("El primer color seleccionado es el Azul\n");
  53. break;
  54.  
  55. case 7:
  56. color1 = 7;
  57. printf("\n");
  58. printf("El primer color seleccionado es el Violeta\n");
  59. break;
  60.  
  61. case 8:
  62. color1 = 8;
  63. printf("\n");
  64. printf("El primer color seleccionado es el Gris\n");
  65. break;
  66.  
  67. case 9:
  68. color1 = 9;
  69. printf("\n");
  70. printf("El primer color seleccionado es el Blanco\n");
  71. break;
  72. }
  73. printf("\n");
  74. 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");
  75. printf("\n");
  76. scanf("%d",&color2);
  77. switch(color2){
  78. case 0:
  79. color2 = 0;
  80. printf("\n");
  81. printf("El segundo color seleccionado es el Negro\n");
  82. break;
  83.  
  84. case 1:
  85. color2 = 1;
  86. printf("\n");
  87. printf("El segundo color seleccionado es el Marron\n");
  88. break;
  89.  
  90. case 2:
  91. color2 = 2;
  92. printf("\n");
  93. printf("El segundo color seleccionado es el Rojo\n");
  94. break;
  95.  
  96. case 3:
  97. color2 = 3;
  98. printf("\n");
  99. printf("El segundo color seleccionado es el Naranja\n");
  100. break;
  101.  
  102. case 4:
  103. color2 = 4;
  104. printf("\n");
  105. printf("El segundo color seleccionado es el Amarillo\n");
  106. break;
  107.  
  108. case 5:
  109. color2 = 5;
  110. printf("\n");
  111. printf("El segundo color seleccionado es el Verde\n");
  112. break;
  113.  
  114. case 6:
  115. color2 = 6;
  116. printf("\n");
  117. printf("El segundo color seleccionado es el Azul\n");
  118. break;
  119.  
  120. case 7:
  121. color2 = 7;
  122. printf("\n");
  123. printf("El segundo color seleccionado es el Violeta\n");
  124. break;
  125.  
  126. case 8:
  127. color2 = 8;
  128. printf("\n");
  129. printf("El segundo color seleccionado es el Gris\n");
  130. break;
  131.  
  132. case 9:
  133. color2 = 9;
  134. printf("\n");
  135. printf("El segundo color seleccionado es el Blanco\n");
  136. break;
  137. }
  138. printf("\n");
  139. 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");
  140. printf("\n");
  141. scanf("%d",&color3);
  142. switch(color3){
  143. case 0:
  144. printf("\n");
  145. printf("La resistencia tiene un valor de %d%d Ohm",color1,color2);
  146. break;
  147.  
  148. case 1:
  149. color3 = 0;
  150. printf("\n");
  151. printf("La resistencia tiene un valor de %d%d%d Ohm",color1,color2,color3);
  152. break;
  153.  
  154. case 2:
  155. color3 = ("00");
  156. printf("\n");
  157. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  158. break;
  159.  
  160. case 3:
  161. color3 = ("000");
  162. printf("\n");
  163. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  164. break;
  165.  
  166. case 4:
  167. color3 = ("0000");
  168. printf("\n");
  169. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  170. break;
  171.  
  172. case 5:
  173. color3 = ("00000");
  174. printf("\n");
  175. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  176. break;
  177.  
  178. case 6:
  179. color3 = ("000000");
  180. printf("\n");
  181. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  182. break;
  183.  
  184. case 7:
  185. color3 = ("0000000");
  186. printf("\n");
  187. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  188. break;
  189.  
  190. case 8:
  191. color3 = ("00000000");
  192. printf("\n");
  193. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  194. break;
  195.  
  196. case 9:
  197. color3 = ("000000000");
  198. printf("\n");
  199. printf("La resistencia tiene un valor de %d%d%s Ohm",color1,color2,color3);
  200. break;}
  201.  
  202. printf("\n");
  203.  
  204. printf("\n");
  205. printf("Deseas volver al menu principal?\n 1. Si\n 2. No\n");
  206. scanf("%d",opcion);
  207. return 0;
  208. }

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


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: elgeneradordenvolupant en 3 Marzo 2012, 13:01 pm
Yo probaría con do...while para crear un bucle.


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: anonimo12121 en 3 Marzo 2012, 16:06 pm
Yo te recomendaría que uses funciones y sentencias if


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: armizh en 3 Marzo 2012, 17:50 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.

Código
  1. int salir = 0;
  2. while(salir) {
  3.        /* Aca va el codigo */
  4.        if(variable_de_eleccion_del_menu==valor_para_salir) salir++;
  5. }
Y con eso haces un bucle que te mantenga en el programa hasta que el usuario quiera salir.
Tambien he visto esto:
Código
  1. while(1) {
  2. /* Aca va el codigo */
  3.        if(variable_de_eleccion_del_menu==valor_para_salir) break;
  4. }
Pero no recuerdo si este ultimo era en C o en alguna de sus variantes, yo prefiero usar la primera opcion que di.

Saludos


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: Whiteseba en 3 Marzo 2012, 21:35 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.

Código
  1. int salir = 0;
  2. while(salir) {
  3.        /* Aca va el codigo */
  4.        if(variable_de_eleccion_del_menu==valor_para_salir) salir++;
  5. }
Y con eso haces un bucle que te mantenga en el programa hasta que el usuario quiera salir.
Tambien he visto esto:
Código
  1. while(1) {
  2. /* Aca va el codigo */
  3.        if(variable_de_eleccion_del_menu==valor_para_salir) break;
  4. }
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


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: armizh en 3 Marzo 2012, 23:37 pm
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:
Código
  1. int salir = 0;
  2. while(salir) {
  3.        /*        ...        */
  4.        printf("Desea realizar otra operacion? [s/n] ");
  5.        char *resp;
  6.        getchar(resp);
  7.        if(strcmp(res,"s")!=0) salir++;
  8. }


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: Whiteseba en 4 Marzo 2012, 01:02 am
Gracias por las respuestas, al final lo pude solucionar con un while =D


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: rir3760 en 4 Marzo 2012, 02:15 am
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


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: armizh en 4 Marzo 2012, 02:42 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


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: Eternal Idol en 4 Marzo 2012, 11:21 am
armizh: revisa el codigo que dejas, no sirve de nada pretender ayudar (O FIGURAR EN EL FORO) de esta manera.


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: armizh en 4 Marzo 2012, 19:41 pm
armizh: revisa el codigo que dejas, no sirve de nada pretender ayudar (O FIGURAR EN EL FORO) de esta manera.
Si, lo siento, lamentablemente aveces soy un poco descuidado, trato de no serlo pero aveces no lo logro. Pero aclaro que de ninguna manera trato de figurar en el foro o algo parecido.

Saludos


Título: Re: [Lenguaje C] Volver al menu principal
Publicado por: Whiteseba en 5 Marzo 2012, 01:28 am
Bueno de todas maneras todos me ayudaron, gracias =D