Problème utilisation va_list et conversion double/float

Bonjour !
J'utilise dans un de mes programmes la structure va_list qui permet d'envoyer un nombre variable d'éléments à une fonction, comme on le fait avec printf. J'attends trois types de valeurs : des int, des char * (des strings), et des float.
Cependant mon compilateur se plaignait qu'il ne pouvait pas prendre en compte des int, mais seulement des floats. Voici donc ce que j'ai fait :
Par exemple, si elements = "-i -i -s -f -i", alors les arguments sont 2 entiers, 1 chaîne de caractères, 1 flottant et 1 entier.
Cela marche parfaitement avec les entiers et les chaînes de caractères, mais avec les flottants cela bug complètement, bien que le compilo soit content. Il enregistre dans le flottant 0.0000000 et les valeurs suivantes sont erronées.
Ce qui m'étonne le plus, c'est que les valeurs qui suivent sont fausses.
Bref, j'ai retourné ce problème nombre de fois et je n'en trouve pas la solution. Je viens mendier un peu de savoir sur les va_list et l'utilisation des double. Peut-être fais-je quelque chose de mal ?
Merci d'avance.

J'utilise dans un de mes programmes la structure va_list qui permet d'envoyer un nombre variable d'éléments à une fonction, comme on le fait avec printf. J'attends trois types de valeurs : des int, des char * (des strings), et des float.
Cependant mon compilateur se plaignait qu'il ne pouvait pas prendre en compte des int, mais seulement des floats. Voici donc ce que j'ai fait :
- Code: Select all
char c;
while ((c=elements[x++])) {
if (c == '-') {
if (!(c=elements[x++]))
break;
if (c == 'i') Table_AddInt(va_arg(v1, int));
else if (c == 'f') Table_AddFloat((float) va_arg(v1, double));
else if (c == 's') Table_AddString(va_arg(v1, char *));
}
}
Par exemple, si elements = "-i -i -s -f -i", alors les arguments sont 2 entiers, 1 chaîne de caractères, 1 flottant et 1 entier.
Cela marche parfaitement avec les entiers et les chaînes de caractères, mais avec les flottants cela bug complètement, bien que le compilo soit content. Il enregistre dans le flottant 0.0000000 et les valeurs suivantes sont erronées.
Ce qui m'étonne le plus, c'est que les valeurs qui suivent sont fausses.

Bref, j'ai retourné ce problème nombre de fois et je n'en trouve pas la solution. Je viens mendier un peu de savoir sur les va_list et l'utilisation des double. Peut-être fais-je quelque chose de mal ?
Merci d'avance.