Problema con el Switch en C

Iniciado por Samnov, 26 Noviembre 2010, 21:57 PM

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

Samnov

Os cuento la situación para situaros , solo me dejan usar la stdio.h , por lo tanto cualquier cosa o ocurrencia para solucionar el problema que no se resuelva con esa libreria no me valdra

El tema es es siguente yo hago un switch dentro de un do//while para que se vaya repitiendo todo va perfecto , funciona , tiene los cases bien puestos el default por si acaso introduce el numero incorrecto etc etc , pero justo en el numero esta mi problema, me explico si por casualidad al usuario se le pasa por la cabeza poner una 'a' pues se fastidio el programa porque empieza a hacer un bucle infinito no se como solucionarlo :s

es algo asi por si no lo veis

scanf("%d", &cosa);
do{
switch(cosa)
     case 1:
     break
     .

     . 

     .
     default printf("opcion incorrecta!);

}while(cosa != 6)

xassiz~

Simplemente haz un break:


#include<stdio.h>

int main()
{
    int cosa;

    scanf("%i", &cosa);

    switch(cosa)
    {
        case 1:
            //Primera opcion
        case 2:
            //Segunda opcion
        default:
            //Lo que ocurre si no se eligieron las anteriores
            break;
     }

     return 0;
}

Samnov

Gracias, pero no no funciona tampoco lo del break :S, no se que hacer la verdad

Beakman


Samnov

#4
mmm.. bueno es que es basicamente lo que he puesto xD no se pero bueno si venga pongo un ejemplo tal y como es el mio

#include <stdio.h>

int main()
{
//menu con tres casos
int opcion;


do{

    printf("Introduzca la opcion que desea \n");
    scanf("%d", &opcion);

   switch(opcion)
 
   case 1: printf("hola");
   break;

   case 2: printf("adios");
   break;

   case 3:
   break; //para salir

default:
printf("Opcion incorrecta");
break;

}while(opcion != 3);

}

lo que he hecho ahora es una tonteria pero es en escencia lo que tengo , el problema viene cuando en vez de poner por ejemplo la opcion 2 se me ocurre poner una a, al principio pense en hacerlo con if's pero hay montones de posibilidades y en este caso no seria muy dificil pero en un menu con 15 opciones por ejemplo seria morirse

// modificado tienes razon esque lo copie mal perdon

xassiz~

#5
¿No ves que la variable opcion siempre va tener el mismo valor dentro del bucle? La entrada de datos está fuera. :rolleyes:

Beakman

Si el problema es que el usuario ingrese una letra, es logico que va a saltar un error porque la variable opcion es un int.
Intenta cambiarlo por un char. Y en vez de poner case 1, case 2, le pones case '1', case '2'.
Ah y te faltan las llaves { } para el switch.

Samnov

#7
GUAU!! muchas gracias asi si que funciona , bueno saltan unos warnings al compilar que dicen algo de multi-character constant pero si el programa funciona

Lh: No hagas doble post. Utiliza el botón modificar.

Pero ahora la duda que tengo es porque me sale lo del multi-character constant en el momento de compilar con el gcc, esque claro preferiria que compilara limpio sabeis sin warnings de por medio, aunque le doy las gracias a qily y pablomi ;D por solucionar el problema

Beakman

Eso salta cuando haces algo asi por ejemplo:

switch( op )
{
   case 'aa': break;
}

Samnov

y sabes si hay alguna forma de resolverlo ? es decir yo hago exactamente lo que dices y vale si el programa tira bien pero el problema viene porque la compilación no es digamosle "limpia", si hay alguna forma que alguien sepa para solucionar lo del dichoso multi-character constat le estaria agradecido