Switch con cadena

Iniciado por Xedrox, 28 Septiembre 2013, 20:07 PM

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

eferion

Cita de: Xedrox en 30 Septiembre 2013, 01:56 AM
Mira deja de contestar porque pareces que no entiendes, el programa externo no lo puedo tocar y punto, no es parte de la solución que estoy otorgando y esta fuera de mi alcance.

Como dice Xiruko, practica comprensión lectora... y te lo digo más que nada por esto ( lo he aislado para que te sea más sencillo de localizar ):

Cita de: eferion en 29 Septiembre 2013, 21:57 PM
Y volviendo a lo de tu programa... me parece lógico que si tienes que aprovechar la salida de un programa ajeno tengas que adaptarte a sus salidas, pero eso no implica que yo no pueda pensar que el que programó eso podía haberlo hecho mejor. Es mi opinión y es tan respetable como la tuya.

Resumido: si el programa que te pasa los parámetros no es tuyo, te tienes que adaptar, no hay otra. Sin embargo yo sigo pensando que el mecanismo empleado es malo con ganas.

Y tranquilo, procuraré no responderte en el futuro, al menos hasta que no aprendas a leer lo que la gente se molesta en escribirte.

x64core



if(strcmp(string1,string2) == 0)
{
...
}
else if(strcmp(string1,string2) == 0)
{
...
}
else if(strcmp(string1,string2) == 0)
{
...
}
else if(strcmp(string1,string2) == 0)
{
...
}
else if(strcmp(string1,string2) == 0)
{
...
}
else
{
...
}


Xedrox

#12
Cita de: xiruko en 30 Septiembre 2013, 04:15 AM
Quizás antes de programar deberías practicar un poco de comprensión lectora...

Para intentar ayudar, si el formato de las opciones siempre es de la misma manera como "opcionX" u "OpcionX" o lo que sea, puedes pasarle un puntero al inicio del número en la cadena a la función atoi() de esta manera:

#include <stdlib.h>
char cadena[]="opcion123";
printf("%d\n", atoi(cadena+6));


output: 123

Claro que si el formato entre opciones cambia entonces ya no sirve. Si no cambia, podrías hacer lo que dijo eferion para ahorrarte un switch-case tan grande y usar punteros a función. Por ejemplo:

// prototipos de las funciones
int funcion_1(void);
int funcion_2(void);

//...

// dentro de main
int (*f[])(void)={funcion_1, funcion_2};    // array de funciones
char cadena[]="opcion2";
int index=atoi(cadena+6);                   // index de la funcion a ejecutar segun la opcion
f[index]();                                 // se ejecuta la funcion


Y bueno, de esta manera ganarías bastante rapidez aunque se perdería algo de legilibilidad en el código.

Saludos.

Punto 1, desde el primer mensaje que vengo diciendo que no entra en discucion el tema de como lo recibo el parametro y sin embargo lo vuelven a mencionar.
Punto 2, el formato entre las opciones no sirve porque son todos distintos entre ellos. Lo unico que queda es dejarlo con if/else como bien dice x64Core.




Cita de: eferion en 30 Septiembre 2013, 08:29 AM
Como dice Xiruko, practica comprensión lectora... y te lo digo más que nada por esto ( lo he aislado para que te sea más sencillo de localizar ):

Resumido: si el programa que te pasa los parámetros no es tuyo, te tienes que adaptar, no hay otra. Sin embargo yo sigo pensando que el mecanismo empleado es malo con ganas.

Y tranquilo, procuraré no responderte en el futuro, al menos hasta que no aprendas a leer lo que la gente se molesta en escribirte.

Dijiste lo que ya te dije antes, me parece que tendrías que buscar "comprension lectura" en google antes de querer dar lecciones. Gracias y saludos.

ivancea96

Me entrometo:

Yo aquí veo una opción muy sencilla, a saber: Codifica las entradas (strToInt(campo)) antes de el switch, y las guardas en variables. Cuando digo codificarlas, digo convertirlas a entero, con el método que más te guste. Luego el resto, aparenta estar resuelto.