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?
#include "stdio.h"
char a, b, c;
int res;
main()
{
vez:
do {
printf("##### Menu Principal De Admin #####\n");
printf("Elige Opcion...\n");
printf("A: Equipos En Esta Red...\n");
printf("B: Nmap Localhost...\n");
printf("C: Activar apache...\n");
res = getchar();
printf("\n");
} while (res!='a' && res != 'b' && res != 'c');
if(res=='a') system ("nmap localhost");
if(res=='b')
{
system ("nmap localhost");
goto vez;
}
if(res=='c') system ("/etc/init.d/apache start");
}
Un saludo.
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:
#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
ok entonces deberia crear una funcion void
y llamarla desde el main?
Cita de: cundre en 10 Febrero 2011, 18:29 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
Gracias por las aclaraciones
pero me sigue imprimiendo 2 veces el menu
deberia llamar a fmenu de alguna otra manera desde el main?
#include <stdio.h>
char a, b, c;
char res;
int main()
{
fmenu();
}
void fmenu()
{
do {
printf("##### Menu Principal De Admin #####\n");
printf("Elige Opcion...\n");
printf("A: Equipos En Esta Red...\n");
printf("B: Nmap Localhost...\n");
printf("C: Activar red...\n");
res = getchar();
printf("\n");
} while (res!='a' && res != 'b' && res != 'c');
if(res=='a') system ("nmap localhost");
if(res=='b')
{
system ("nmap localhost");
main();
}
if(res=='c') system ("/etc/init.d/apache start");
}
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
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.
#include<stdio.h>
int main()
{
char res;
do {
/* Pedimos datos */
printf("##### Menu Principal De Admin #####\n");
printf("Elige Opcion...\n");
printf("A: Equipos En Esta Red...\n");
printf("B: Nmap Localhost...\n");
printf("C: Activar apache...\n");
res = getchar();
printf("\n");
/* Los if */
if(res=='a') system("nmap localhost");
elseif(res=='b') system("nmap localhost");
elseif(res=='c') system("/etc/init.d/apache start");
} while (res!='a' && res != 'b' && res != 'c');
return 0;
}
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.