elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (solucionado)volver menu principal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (solucionado)volver menu principal  (Leído 6,554 veces)
cundre

Desconectado Desconectado

Mensajes: 61


Ver Perfil
(solucionado)volver menu principal
« en: 10 Febrero 2011, 17:52 pm »

hola alguien me podria decir como volver al menu principal.
me esplico.
Tengo este ejemplo pero cuando quiero volver al inicio me
duplica el menu principal.
¿donde esta el fallo?

Código
  1. #include "stdio.h"
  2. char a, b, c;
  3. int res;
  4. main()
  5. {
  6. vez:
  7. do {
  8. printf("##### Menu Principal De Admin   #####\n");
  9. printf("Elige Opcion...\n");
  10. printf("A: Equipos En Esta Red...\n");
  11. printf("B: Nmap Localhost...\n");
  12. printf("C: Activar apache...\n");
  13. res = getchar();
  14. printf("\n");
  15.  
  16. } while (res!='a' && res != 'b' && res != 'c');
  17.  
  18.  
  19. if(res=='a') system ("nmap localhost");
  20. if(res=='b')
  21. {
  22. system ("nmap localhost");
  23. goto vez;
  24. }
  25. if(res=='c') system ("/etc/init.d/apache start");
  26. }
  27.  

Un saludo.


« Última modificación: 15 Febrero 2011, 11:00 am por cundre » En línea

@copyleft
Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: volver menu principal
« Respuesta #1 en: 10 Febrero 2011, 18:22 pm »

Fijate que el tipo de res es int, y en la condicion del while, lo estas comparando como si fuese un char,

Puedes hacer el menu como una funcion void, asi te quedara la funcion main mas libre.

Otros fallos:

Código
  1. #include "stdio.h"

Se debe incluir como #include <stdio.h>

"archivo" se utiliza para archivos que estan en la misma carpeta

la funcion main, es recomendable que vaya precedida de int, segun el standart

P.D: Evita usar la instruccion goto.

Saludos


En línea

cundre

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: volver menu principal
« Respuesta #2 en: 10 Febrero 2011, 18:29 pm »

ok entonces deberia crear una funcion void

y llamarla desde el main?
En línea

@copyleft
Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: volver menu principal
« Respuesta #3 en: 10 Febrero 2011, 18:38 pm »

ok entonces deberia crear una funcion void

y llamarla desde el main?

Con el tamaño de codigo que tienes no seria necesario, pero cuando en un programa llamas al menu varias veces, comprenderas que es mas practico  :xD
En línea

cundre

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: volver menu principal
« Respuesta #4 en: 10 Febrero 2011, 18:43 pm »

Gracias por las aclaraciones
pero me sigue imprimiendo 2 veces el menu
deberia llamar a fmenu de alguna otra manera desde el main?


Código
  1. #include <stdio.h>
  2. char a, b, c;
  3. char res;
  4.  
  5. int main()
  6. {
  7. fmenu();
  8. }
  9.  
  10. void fmenu()
  11. {
  12. do {
  13. printf("##### Menu Principal De Admin   #####\n");
  14. printf("Elige Opcion...\n");
  15. printf("A: Equipos En Esta Red...\n");
  16. printf("B: Nmap Localhost...\n");
  17. printf("C: Activar red...\n");
  18. res = getchar();
  19. printf("\n");
  20.  
  21. } while (res!='a' && res != 'b' && res != 'c');
  22.  
  23. if(res=='a') system ("nmap localhost");
  24. if(res=='b')
  25. {
  26. system ("nmap localhost");
  27. main();
  28. }
  29. if(res=='c') system ("/etc/init.d/apache start");
  30. }
  31.  
En línea

@copyleft
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: volver menu principal
« Respuesta #5 en: 10 Febrero 2011, 20:41 pm »

Se me hace que al darle a una letra y tocar enter, getchar() toma la letra, procesa, vuelve a imprimir el menú, pero no espera a que escribas otra letra, sino que lee el enter que presionaste anteriormente, y como es distinto de a, b o c, entonces vuelve a imprimir el menú. Deberías de limpiar el buffer de entrada (olvídate de usar fflush(stdin) como seguramente vayas a leer en tooooodos lados, por favor :D).

Otra cosa, es bastante feo llamar a la función main :P
« Última modificación: 10 Febrero 2011, 20:51 pm por Ferno » En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: volver menu principal
« Respuesta #6 en: 10 Febrero 2011, 21:44 pm »

El fallo principal estaba en que los if tenían que estar dentro del while ;D

La variable res de tipo char, si, pero dónde utilizas las variables "a", "b" y "c"? :xD

Y por supuesto no usar goto.

Código
  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5. char res;
  6.  
  7. do {
  8. /* Pedimos datos */
  9. printf("##### Menu Principal De Admin   #####\n");
  10. printf("Elige Opcion...\n");
  11. printf("A: Equipos En Esta Red...\n");
  12. printf("B: Nmap Localhost...\n");
  13. printf("C: Activar apache...\n");
  14. res = getchar();
  15. printf("\n");
  16.  
  17. /* Los if */
  18. if(res=='a') system("nmap localhost");
  19. elseif(res=='b') system("nmap localhost");
  20. elseif(res=='c') system("/etc/init.d/apache start");
  21.  
  22. } while (res!='a' && res != 'b' && res != 'c');
  23.  
  24. return 0;
  25. }
  26.  
« Última modificación: 10 Febrero 2011, 21:50 pm por pablomi » En línea

cundre

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: volver menu principal
« Respuesta #7 en: 11 Febrero 2011, 17:18 pm »

Bueno lo Solucione Gracias por las pistas.

añadi while(getchar()!='\n');
Para vaciar el buffer del teclado


Paso por paso:

- Llamada a scanf("%d", &numero);
- Como el buffer esta vacio, se espera a que el usuario introduzca por teclado:
- Introduces el numero 54 y pulsas Intro.
- El buffer ahora contiene esta cadena: "54\n"
- scanf() extrae el primer valor numerico que encuentra: 54
- El buffer contiene ahora: "\n"
- Llamada a scanf("%d", &numero); (por segunda vez)
- Como en el buffer ya hay un '\n' , que es como si ya hubieras pulsado Intro, se finaliza la entrada por teclado sin darte oportunidad a escribir nada.

referencia: http://foro.noticias3d.com/vbulletin/showthread.php?t=121100

no se si es la mejor manera pero comforme aprenda lo averiguare.

Un saludo.
En línea

@copyleft
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
crear un pelicula con un menu principal
Multimedia
Luish@o 3 4,331 Último mensaje 7 Noviembre 2009, 14:40 pm
por Axus
Volver al menú principal sin usar goto « 1 2 3 »
Programación C/C++
martin_poipon 20 16,013 Último mensaje 3 Julio 2011, 11:19 am
por Foxy Rider
[Lenguaje C] Volver al menu principal « 1 2 »
Programación C/C++
Whiteseba 11 24,548 Último mensaje 5 Marzo 2012, 01:28 am
por Whiteseba
netbeans abrir ventana secuandaria y volver a los procesos de la principal
Java
PhipexX 2 2,724 Último mensaje 2 Enero 2017, 19:05 pm
por ThinkByYourself
"Ayuda" No se como volver al menu principal C#
Programación C/C++
MaximuZ 1 4,630 Último mensaje 6 Junio 2017, 06:28 am
por yoelmend
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines