Ayuda menu

Iniciado por s3v3r, 24 Diciembre 2015, 14:28 PM

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

s3v3r

Hola :D el caso es que quería hacer un menu con 5 opciones que si no se pincha ninguna de ellas me salte el menu otra vez... sencillo pero parece que no  :laugh:

Lo que tengo hasta ahora:


void menu() {
 char c;
 do {
   printf ("Menu\n");
   printf ("      A        (Pulsa A)\n");
   printf ("      O        (Pulsa O)\n");
   printf ("      C        (Pulsa C)\n");
   printf ("      V        (Pulsa V)\n");
   printf ("      S        (Pulsa S)\n");
   scanf("%c", &c);
   switch (c) {
 case 'A':      case 'a':
     A();
     break;
 case 'O':      case 'o':
     O();
     break;
 case 'C':      case 'c':
     C();
     break;
 case 'V':      case 'v':
     V();
     break;
 case 'S':      case 's':
     break;
   }
 } while (c!='S' || c!='s');

}

int main() {
 menu();
}


1)No se si esta bien hecho pero si pongo dos opciones en el while deja de funcionar... con nunguna de las dos se sale del menu.
2)No entra en ninguno de los casos desde que pongo el do while, solo se repite el menu constantemente aunque ponga unos valores correctos a c.
3)Cuando repite el menu siempre se repite 2 veces manteniendo el que ya estaba.

Si alguien puede ayudarme con esos 3 puntos

ivancea96

Piensa bien la condición: c != 'S' || c != 's'
O es diferete de 'S', o es diferente de 's'. Siempre va a ser diferente de una de ellas.

Será: c!='S' && c!='s'

s3v3r

#2
Cierto!!! Muy cierto, resulto estupido segun me lo explicaste jajajajaja
Fallo garrafal pero sigue saliendome dos veces cuando aprieto alguna condicion correcta... A o a
Puede ser que llame en el main y luego sea el do while en menu?

MAFUS

Muy buenas.

Pues eso es porque cuándo has introducido la opción a la siguiente ejecución del menú en el bufer del teclado sigue quedando el carácter de nueva línea. Éste es aceptado por scanf y la ejecución continua.

Inserta el código en tu switch y lo verás
  case '\n':
      printf("*** NL ***\n");


Debes encontrar una forma de eliminar el este carácter del buffer después del scanf.

Eso sí, fflush(stdin); no es la forma  :rolleyes: