SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Rombus en Lunes 29 de Diciembre de 2008, 19:32

Título: Simple Case Error
Publicado por: Rombus en Lunes 29 de Diciembre de 2008, 19:32
Hola gente!

estoy haciendo un programa con una sentencia switch muy extensa, y me encontre con un error bastante simple que no eh podido eliminar.

el codigo reducido al problema es este (esta hecho para wingdows):

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int main(void){
  6.     char caracter;
  7.    
  8.     printf("%dn",VK_NUMPAD0);
  9.     printf("%dnn",VK_NUMPAD9);
  10.  
  11.     printf("%dn",'1');
  12.     printf("%dnn",'9');
  13.  
  14.     printf("%dn",'A');
  15.     printf("%dnn",'Z');
  16.  
  17.     for(caracter = 0; caracter < 256; caracter++){
  18.             switch(caracter){
  19.                 case 'A'||'B'||'C'||'D'||'E'||'F'||
  20.                      'G'||'H'||'I'||'J'||'K'||'L'||
  21.                      'M'||'N'||'O'||'P'||'Q'||'R'||
  22.                      'S'||'T'||'U'||'V'||'W'||'X'||
  23.                      'Y'||'Z'||
  24.  
  25.                      '1'||'2'||'3'||'4'||'5'||
  26.                      '6'||'7'||'8'||'9'||'0':
  27.                             printf("aguante...n");
  28.  
  29.                     break;  
  30.                 case VK_NUMPAD0||VK_NUMPAD1||VK_NUMPAD2||VK_NUMPAD3||VK_NUMPAD4||
  31.                      VK_NUMPAD5||VK_NUMPAD6||VK_NUMPAD7||VK_NUMPAD8||VK_NUMPAD9:                    
  32.                         printf("..el metal!!n");                                      
  33.                     break;
  34.             }
  35.     }
  36.  
  37.     return 0;
  38. }
  39.  

el error q obtengo es el de que el valor case '1' ya ha sido utilizado.
Lo extraño , o capaz mi mal interpretacion del error, es que ninguna constante usada en los cases es 1, imprimi sus valores al comienzo del programa y demuestra que no hay valores repetidos.

sera que estoy utilizando mal la sentencia switch case?


saludos!
Título: Re: Simple Case Error
Publicado por: m0skit0 en Lunes 5 de Enero de 2009, 09:24
Creo que tu problema radica en que no tienes en cuenta el código scan del teclado sino simplemente el código ASCII, con lo que '1' y VK_NUMPAD1 (y todos los números) tienen el mismo código ASCII puesto que es el mismo carácter.

Salud
Título: Re: Simple Case Error
Publicado por: Rombus en Lunes 5 de Enero de 2009, 14:54
a q te refieres con el codigo scan del teclado?
Título: Re: Simple Case Error
Publicado por: m0skit0 en Lunes 5 de Enero de 2009, 15:09
El código scan del teclado identifica la posición de la tecla, independientemente del lenguaje, simplemente reporta qué tecla fue pulsada. Luego ésta se convierte en un código ASCII o Unicode según el lenguaje y el sistema operativo.
Título: Re: Simple Case Error
Publicado por: Rombus en Lunes 5 de Enero de 2009, 15:44
:o!

eso me es muy util  :beer:


estoy buscando documentacion sobre eso, conoces alguna pagina que tenga info acerca de eso?

gracias!
Título: Re: Simple Case Error
Publicado por: Rombus en Lunes 5 de Enero de 2009, 15:47
aca dejo las q encontre por si a alguien le es util ;)

http://es.wikipedia.org/wiki/Scan_Code (http://es.wikipedia.org/wiki/Scan_Code" onclick="window.open(this.href);return false;)
http://flint.cs.yale.edu/cs422/doc/art- ... APNDXC.PDF (http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/APNDXC.PDF" onclick="window.open(this.href);return false;)
Título: Re: Simple Case Error
Publicado por: m0skit0 en Lunes 5 de Enero de 2009, 15:48
Pues con buscar "scan codes" en Google lo tienes listo

http://www.google.es/search?client=fire ... con+Google (http://www.google.es/search?client=firefox-a&rls=org.mozilla%3Aes-ES%3Aofficial&channel=s&hl=es&q=scan+codes&meta=&btnG=Buscar+con+Google" onclick="window.open(this.href);return false;)