[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
- Accusé de lecture gmail - Guide
- Lecture epub sur pc - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- 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