Enums opcionales - sscanf
#1

Ya que en la secciуn inglesa nadie pudo ayudarme, la publico aquн. Tengo el siguiente cуdigo:

pawn Код:
sscanf("1 2 3 4", "E<ii-i-i>(20,30)", quiet_enum);


    printf("%i value 1", quiet_enum[value_1]);
    printf("%i value 2", quiet_enum[value_2]);
    printf("%i value 3", quiet_enum[value_3]);
    printf("%i value 4", quiet_enum[value_4]);
la cual imprimirнa "20-30-0-0", pero me daria el siguiente error en la consola: sscanf error: Insufficient default values.
Vale, yo lo puedo arreglar con el siguiente cуdigo:

pawn Код:
sscanf("1 2 3 4", "E<ii-i-i>(20,30,40,50)", quiet_enum);


    printf("%i value 1", quiet_enum[value_1]);
    printf("%i value 2", quiet_enum[value_2]);
    printf("%i value 3", quiet_enum[value_3]);
    printf("%i value 4", quiet_enum[value_4]);
Pero me imprimirнa "1-2-0-0", y no "20-30-0-0", este ъltimo es como quiero que se imprima. їHay alguna forma de realizarlo sin que te dй error el sscanf?. Gracias.
Reply
#2

Bueno por si alguien tiene algъn dia el mismo problema, dejare la soluciуn.

Al parecer es un fallo del SSCANF, asi que para poder realizar este tipo de enums opcionales y ademбs agregarle valores default, se ha de tener el dato del sscanf (const data[]) vacio (sin nada). Ejemplo:

pawn Код:
sscanf("", "E<ii-i-i>(20, 30, 40)", quiet_enum);
їPor quй no "0 0 0 0"?, porque el 0 tambiйn es tomado como un valor, lo cual entonces imprimiria "0-0-0-0". Probado y certificado.

Edit: Sin olvidarse de que los valores default tienen que ser como minimo tres (3) para que no salte el error de "Insufficient defaults value".
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)