[C] Utiliser atof avec un chaine contenant une "," et pas un "." ????

Utiliser atof avec un chaine contenant une "," et pas un "." ???? [C] - C - Programmation

Marsh Posté le 09-09-2003 à 09:17:17    

[C] Utiliser atof avec un chaine contenant une "," et pas un "." ????
 
Ma chaine de caractere (ex :12,50).
J'ai un pb d'execution lorque j'utilise atof sur cette chaine.
 
A priori, atof prefererait 12.50 ......
 
 
Une idée ?
Merci

Reply

Marsh Posté le 09-09-2003 à 09:17:17   

Reply

Marsh Posté le 09-09-2003 à 09:19:22    

mario51 a écrit :

[C] Utiliser atof avec un chaine contenant une "," et pas un "." ????
 
Ma chaine de caractere (ex :12,50).
J'ai un pb d'execution lorque j'utilise atof sur cette chaine.
 
A priori, atof prefererait 12.50 ......
 
 
Une idée ?
Merci


 
remplace les , par des .  [:spamafote]


---------------
Le Tyran
Reply

Marsh Posté le 09-09-2003 à 09:22:33    

LetoII a écrit :


 
remplace les , par des .  [:spamafote]  


 
Si c'etait aussi simple que ca ......
Les données sont en lecture seule
 
 
Cette solution n'est pas envisageable, merci quand meme...
 
 
 

Reply

Marsh Posté le 09-09-2003 à 09:24:44    

rien t empeche de copier la chaine en lecture "seule" ds une chaine temp ...

Reply

Marsh Posté le 09-09-2003 à 09:24:54    

mario51 a écrit :


 
Si c'etait aussi simple que ca ......
Les données sont en lecture seule
 
 
Cette solution n'est pas envisageable, merci quand meme...
 
 
 
 


 :heink: Modifie la chaîne de caractère pas la source  :sarcastic:


---------------
Le Tyran
Reply

Marsh Posté le 09-09-2003 à 09:27:47    

et si tu tiens à ne rien modifier, sscanf doit te permettre de faire ce que tu veux!

Reply

Marsh Posté le 09-09-2003 à 09:38:03    

Code :
  1. #include <locale.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.   setlocale(LC_ALL, "" );
  6.   printf("pi = %f\n", 3.1415);
  7.   double d;
  8.   if(scanf("%lf", &d) == 1)
  9.     {
  10.       printf("d = %f\n", d);
  11.     }
  12. }


 
penche toi sur les locales : setlocale et localeconv

Reply

Marsh Posté le 26-09-2003 à 23:20:43    

voici une transformation de 12,5 en 12.5:
c'est un peu lourd mais ca fonctionne impect

Code :
  1. //constantes
  2. #define LG_CHAINE 10
  3. //variable globales
  4. char chaine[LG_CHAINE]="12,50";
  5. char separateur[]   = ",";
  6. char *separation;
  7. char chaine_retour[LG_CHAINE];
  8. double resultat;
  9. void main (void)
  10. {
  11. separation = strtok( chaine, separateur );
  12. strcpy(chaine_retour,separation);
  13. strcat(chaine_retour,"." );
  14. separation = strtok( NULL, separateur );
  15. strcat(chaine_retour,separation);
  16. resultat = atof( chaine_retour );
  17. printf("retour : %f\n",resultat);
  18. }

Reply

Marsh Posté le 26-09-2003 à 23:47:56    

legerement lourd :O
 
pkoi tu fais pas comme ca :
 
 

Code :
  1. int i=0;
  2. int le = strlen(chaine;
  3. while(i<le)
  4. {
  5. if (chaine[i] == ',')
  6. chaine[i] = '.';
  7. i++;
  8. }
  9. float f = atof(chaine);

Reply

Marsh Posté le 27-09-2003 à 10:05:23    

n'importe quoi les mecs ... soit setlocale, soit strchr, soit strxfrm
 
pas la peine de faire n'imp avec strtok ou de réinventer la roue
ensuite je vous ai déjà dit ce que je pensais de atof et strtod : aucune détection d'erreur possible -> sscanf

Reply

Sujets relatifs:

Leave a Replay

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