[C] sscanf et lecture de réel

Fermé
Thib42 Messages postés 12 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 31 juillet 2006 - 28 juil. 2006 à 16:47
mamiemando Messages postés 33321 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 octobre 2024 - 31 juil. 2006 à 19:34
Bonjour tous le monde !

Je rencontre un problème lorsque je cherche à lire des réels depuis un buffer : impossible de faire fonctionner le sscanf ... encore ...
Je lis en fait une ligne de 250 caractères dont les caractère 159 à 165 represente un litrage en mL, dans mon exemple : 1023800 (autre ex : 0048600)
Voila plusieurs bouts de code pour comprendre le problème :

s->data[i].volumeCarbu --> float
tmp --> int

-------------------------


                       for (k=158; k < 165; k++)
                           buffer[k-158] = ligne[k];
                       buffer[k-158] = '\0';
                       if (1 != sscanf(buffer,"%f",&s->data[i].volumeCarbu))
                          return 0;
                       s->data[i].volumeCarbu /= 1000.0f;

Résultat :
Un nombre qui n'a rien a voir du type : 1218173.0
-------------------------

                       for (k=158; k < 165; k++)
                           buffer[k-158] = ligne[k];
                       buffer[k-158] = '\0';
                       if (1 != sscanf(buffer,"%d",&tmp))
                          return 0;
                       s->data[i].volumeCarbu = tmp/1000.0f;

Résultat :
Le bon nombre mais sans les décimales (tronqué) : 1023.0


--> Impossible d'avoir le bon résultat : 1023.8


Est ce que quelqu'un aurait une solution ?
Merci d'avance ;) !
A voir également:

3 réponses

mamiemando Messages postés 33321 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 octobre 2024 7 798
31 juil. 2006 à 19:34
#include <stdlib.h>
#include <stdio.h>

char *substr(const char *str,unsigned int beg,unsigned end){
    unsigned int i,len=end-beg+1;
    char *res = (char *)calloc(sizeof(char),len);
    for(i=0;i<len;++i) res[i]=str[i+beg];
    return res;
}

int main(){
    double my_double;
    char *str="123456789|1.23|123456789";
    unsigned int beg=10,end=13;
    char *my_substr=substr(str,beg,end);
    printf("my_substr = [%s]\n",my_substr);
    sscanf(my_substr," %lf ",&my_double);
    printf("my_double = [%lf]\n",my_double);
    printf("Press any key\n");
    getchar();
    return 0;
}

Bonne chance
1
mamiemando Messages postés 33321 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 octobre 2024 7 798
30 juil. 2006 à 19:28
Il faudrait que tu nous donne le format de la ligne à lire. Vérifie aussi que ton buffer contient bien la chaine contenant le réel. Enfin je pense qu'il faudrait plutot écrire :
double d;
sscanf(buffer," %lf ",&d);

Bonne chance
0
Thib42 Messages postés 12 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 31 juillet 2006 1
31 juil. 2006 à 09:59
Merci pour ta réponse, malheureusement ca ne fonctionne pas mieu chez moi :(
0