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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con el Switch en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el Switch en C  (Leído 11,905 veces)
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: Problema con el Switch en C
« Respuesta #10 en: 5 Diciembre 2010, 22:18 pm »

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
  1. case 'Á':
  2. case 'Ã:

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



En línea

- 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


Desconectado Desconectado

Mensajes: 589

#include<winroot.h>


Ver Perfil WWW
Re: Problema con el Switch en C
« Respuesta #11 en: 5 Diciembre 2010, 23:55 pm »

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


En línea

Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema con el Switch en C
« Respuesta #12 en: 6 Diciembre 2010, 08:48 am »

.
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
  1.  
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    int opcion;
  9.    do {
  10.        cout << "Introduzca la opcion que desea"<<endl;
  11.        cin >> opcion;
  12.        switch(opcion)
  13.        {
  14.            case 1:
  15.                cout << "hola" << endl;break;
  16.            case 2:
  17.                cout << "Adios" << endl;break;
  18.            case 3:break;
  19.            default:
  20.                cout<<"Opcion incorrecta" << endl;break;
  21.        }
  22.    }while(opcion != 3);
  23.    return (1);
  24. }
  25.  
  26.  

Código
  1.  
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. //  By BlackZeroX.
  7. int strcmp( char *s , char *t );
  8. int strcmp( char *s , char t[] );
  9. int strcmp( char s[] , char *t );
  10. int strcmp( char s[] , char t[] );
  11. // http://infrangelux.sytes.net/
  12.  
  13. int main()
  14. {
  15.    char char_opt[250];
  16.    for(;;)
  17.    {
  18.        cout << "Introduzca la opcion que desea"<<endl;
  19.        cin >> char_opt;
  20.        if (        strcmp(&char_opt[0],"hi") == 0 ) {
  21.            cout << "hola" << endl;
  22.        } else if ( strcmp(&char_opt[0],"xao") == 0 ) {
  23.            cout << "Adios" << endl;
  24.        } else if ( strcmp(&char_opt[0],"exit") == 0 ){
  25.            break;  //  Sale del siclo For()
  26.        } else {
  27.            cout<<"Opcion incorrecta" << endl;
  28.        }
  29.    }
  30.    return (1);
  31. }
  32.  
  33. int strcmp( char *s , char *t ) //  By BlackZeroX ( http://infrangelux.sytes.net/ ).
  34. { /* Devuelve <0 si s<t, 0 si s==t, >0 si S>t */
  35.    for(;*s==*t;s++,t++)
  36.        if (*s == '\0')
  37.            return (0);
  38.    return (*s - *t);
  39. }
  40.  
  41.  

Sangriento Infierno Lunar!¡.
« Última modificación: 6 Diciembre 2010, 09:11 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
winroot


Desconectado Desconectado

Mensajes: 589

#include<winroot.h>


Ver Perfil WWW
Re: Problema con el Switch en C
« Respuesta #13 en: 6 Diciembre 2010, 15:05 pm »

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
  1. int num=0;
  2. cin >>num;
  3. if(false ==cin)
  4. {
  5. cout <<"Error leyendo entrada " <<endl;
  6. return 1;
  7. }
  8.  
  9.  
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
« Última modificación: 6 Diciembre 2010, 15:14 pm por winroot » En línea

Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Switch
Programación C/C++
higor24 2 3,776 Último mensaje 19 Noviembre 2010, 16:41 pm
por Fer995
vpcf126fm problema con el switch del wireless
Dudas Generales
gmpv 0 3,400 Último mensaje 18 Septiembre 2011, 20:39 pm
por gmpv
Problema con switch y Roku
Redes
b2k 3 2,297 Último mensaje 2 Julio 2013, 03:01 am
por mugre
Problema con comando switch
Programación C/C++
oliverm 1 1,936 Último mensaje 9 Julio 2013, 01:05 am
por rir3760
Problema con Switch y ficheros.
Programación C/C++
assembly 2 2,157 Último mensaje 31 Agosto 2013, 16:42 pm
por assembly
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines