Problema con el Switch en C

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

0 Miembros y 1 Visitante están viendo este tema.

JuszR

O estás poniendo más de un caracter (como ya dijeron) o es un caracter acentuado o por el estilo.

Esto también daría warnings:
Código (cpp) [Seleccionar]
case 'Á':
case 'Ã:


Y si pones más de un caracter, nunca vas a llegar a esa parte del case porque char solo almacena un caracter.

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

winroot

Buenas!
Porqué solo stdio?
Es decir,¿ no podés usar funciones del estilo atoi o itoa?.
si no me equivoco definidas en stdlib.h, una librería estándar.
Lo que haría yo es:
.Guardar la entrada en una cadena.
.Comprovar que es un número válido.
.Usar la función atoi para pasar de char* a int.
.Usar enumeraciones para el switch.
En c++ con boost todo es mas simple ^^.
Saludos
Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com

BlackZeroX

#12
.
Espero te sirva alguno de estos ejemplos con Switch y otro con if, no me gusta mucho usar otras librerias si no nesesito muchas de ellas, por ende me creo algunas como el el segundo ejemplo, donde me ahorre String.h.

Código (cpp) [Seleccionar]


#include<iostream>

using namespace std;

int main()
{
    int opcion;
    do {
        cout << "Introduzca la opcion que desea"<<endl;
        cin >> opcion;
        switch(opcion)
        {
            case 1:
                cout << "hola" << endl;break;
            case 2:
                cout << "Adios" << endl;break;
            case 3:break;
            default:
                cout<<"Opcion incorrecta" << endl;break;
        }
    }while(opcion != 3);
    return (1);
}



Código (cpp) [Seleccionar]


#include<iostream>

using namespace std;

//  By BlackZeroX.
int strcmp( char *s , char *t );
int strcmp( char *s , char t[] );
int strcmp( char s[] , char *t );
int strcmp( char s[] , char t[] );
// http://infrangelux.sytes.net/

int main()
{
    char char_opt[250];
    for(;;)
    {
        cout << "Introduzca la opcion que desea"<<endl;
        cin >> char_opt;
        if (        strcmp(&char_opt[0],"hi") == 0 ) {
            cout << "hola" << endl;
        } else if ( strcmp(&char_opt[0],"xao") == 0 ) {
            cout << "Adios" << endl;
        } else if ( strcmp(&char_opt[0],"exit") == 0 ){
            break;  //  Sale del siclo For()
        } else {
            cout<<"Opcion incorrecta" << endl;
        }
    }
    return (1);
}

int strcmp( char *s , char *t ) //  By BlackZeroX ( http://infrangelux.sytes.net/ ).
{ /* Devuelve <0 si s<t, 0 si s==t, >0 si S>t */
    for(;*s==*t;s++,t++)
        if (*s == '\0')
            return (0);
    return (*s - *t);
}



Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.

winroot

#13
Buenas!
Lo de boost lo puse porque se puede comprovar si un número es válido tomando un string.
Por cierto, si vas a usar c++, usa la clase string, que es mucho mas segura que las cadenas clásicas de c.
Además, sigue pasando lo mismo, es mas, si el usuario introduce por ejemplo 1000000000000fffff, probablemente el programa ´dejará de funcionar ^^.
Código (cpp) [Seleccionar]

int num=0;
cin >>num;
if(false ==cin)
{
cout <<"Error leyendo entrada " <<endl;
return 1;
}


En c, si no me equivoco existe una macro llamada isdigit, que comprueva si el char que se le pasa es un número válido .
Saludos
Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com