¡Buenas!
Eso de los
switch me parece un poco caótico. Yo lo que haría seria una función que me valide el código que le pasas y recoja los valores en los parámetros que le pases. Después, clasifica los parámetros como te convenga. Por ejemplo:
#include <ctype.h>
#include <string.h>
/*
Si el formato no es correcto devuelve cero, sino uno.
si la funcion devuelve 1 hay que comprobar si valor==-1 para saber si el primer
caracter desupues de [ es una D o no
*/
int validar_secuencia(char *s, int *valor, char codigo[3])
{
char *codigos[] = {"x]","y]","sp]","pc]"};
int i;
*valor = 0;
if(!(*s))
return 0;
if(s[0] != '[')
return 0;
if(*(++s) == 'D')
{
*valor = -1;
s++;
}
else
{
{
(*valor) *= 10;
(*valor) += (*s) - '0';
}
}
return 0;
for(i = 0 ; i < 4 ; i++)
break;
if(i == 4)
return 0;
codigo
[strlen(codigos
[i
]) - 1] = '\0';
return *(s
+ strlen(codigos
[i
])) == '\0'; }
int main(int argc, char *argv[])
{
char *codigos[] = {"[123,x]","[1045,sp]","hola","[1,pc","[D,y]",""},codigo[3];
int i = 0,valor;
while(codigos[i][0])
{
if(validar_secuencia(codigos[i],&valor,codigo))
printf("%s: Codigo correcto (valor=%d, codigo=%s)\n",codigos
[i
],valor
,codigo
);
else
printf("%s: Codigo incorrecto\n",codigos
[i
]);
i++;
}
}
De todas formas, si estás obligado a utilizar los
switch veremos que se puede hacer. Ya diras.
¡Saludos!