[C] sscanf et lecture de réel
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
-------------------------
Résultat :
Un nombre qui n'a rien a voir du type : 1218173.0
-------------------------
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 ;) !
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:
- [C] sscanf et lecture de réel
- Confirmation de lecture whatsapp - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Accusé de lecture gmail - Guide
- Lecture epub sur pc - Guide
- Maps satellite en temps réel - Guide
3 réponses
#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