[RESOLU] sscanf pour récupérer des float

sscanf pour récupérer des float [RESOLU] - C++ - Programmation

Marsh Posté le 14-06-2012 à 16:20:32    

Bonjour à tous,
Je vous demande de l'aide pour résoudre une erreur. Je parcours un fichier ligne par ligne et chaque ligne représente les coordonnées de points donc ma ligne est du format :  
"  8.525  5.66  4.65" ou  
" -52.2  -545  -552.6"
Notez bien que le - devant les valeurs de la seconde ligne est décalé d'un caractère vers la gauche par rapport aux premiers caractères des valeurs de la première ligne ... (Je ne sais pas si ca a vraiment de l'importance ...)  
J'ai essayé d'utiliser sscanf mais les valeurs retournées sont 0.000 ...
Une idée ?
Merci


Message édité par JPP78750 le 14-06-2012 à 18:34:21
Reply

Marsh Posté le 14-06-2012 à 16:20:32   

Reply

Marsh Posté le 14-06-2012 à 16:27:13    

Ben montre nous ton code, vu que déjà le sscanf au lieu d'un fscanf, j'aimerais le comprendre, et qu'on a pas le format auquel tu lis.
A+,


Message édité par gilou le 14-06-2012 à 16:30:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-06-2012 à 18:23:45    

Voila mon code

 
Code :
  1. // fonction qui permet de lire la ligne souhaitée
  2. char *get_line(char *buf, int n, FILE *f, int line) {
  3.     for(int i = 0; i < line; ++i)
  4.         if(fgets(buf, n, f) == NULL)
  5.             return NULL;
  6.     buf[strlen(buf) - 1] = '\0';
  7.    
  8.     return buf;
  9. }
  10. int main(int argc, char** argv)
  11. {
  12.     float Noeud[nbnoeuds][2];
  13. // fichier maillage
  14.     FILE *fichier=fopen("/Users/JPP/Documents/projets/opencl/Sphere.plt", "r" );   
  15.    
  16.     if(fichier)  // si l'ouverture a réussi
  17.     {     
  18. // lecture de la première valeur de la ligne 10
  19. char buf2[BUF_SIZE];
  20.         get_line(buf2, BUF_SIZE, fichier, 10);
  21.         sscanf (buf2, "%f", Noeud[10][0]);   
  22.         printf("%f \n",Noeud[10][0]);
  23. }
  24. }

Message cité 1 fois
Message édité par JPP78750 le 14-06-2012 à 18:24:10

---------------
http://www.jppanaget.com
Reply

Marsh Posté le 14-06-2012 à 18:29:39    

JPP78750 a écrit :

Voila mon code
 

Code :
  1. // fonction qui permet de lire la ligne souhaitée  
  2. char *get_line(char *buf, int n, FILE *f, int line) {
  3.     for(int i = 0; i < line; ++i)
  4.         if(fgets(buf, n, f) == NULL)
  5.             return NULL;
  6.     buf[strlen(buf) - 1] = '\0';
  7.    
  8.     return buf;
  9. }
  10. int main(int argc, char** argv)
  11. {
  12.     float Noeud[nbnoeuds][2];
  13. // fichier maillage
  14.     FILE *fichier=fopen("/Users/JPP/Documents/projets/opencl/Sphere.plt", "r" );   
  15.    
  16.     if(fichier)  // si l'ouverture a réussi
  17.     {     
  18. // lecture de la première valeur de la ligne 10
  19. char buf2[BUF_SIZE];
  20.         get_line(buf2, BUF_SIZE, fichier, 10);
  21.         sscanf (buf2, "%f", Noeud[10][0]);   
  22.         printf("%f \n",Noeud[10][0]);
  23. }
  24. }



 
tu dois donner une adresse pour stocker ta variable, or Noeud[10][0] n'en est pas une.
 
 

Reply

Marsh Posté le 14-06-2012 à 18:33:16    

Bon c'était juste ça,  
Merci beaucoup.


---------------
http://www.jppanaget.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed