Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/03/2007, à 16:55

amwus

[Résolu] strtod C ?

Bonjour !

Voila, j'essaie de parser une chaine de caractère avec strtod en C.
En fait, quand il trouve un nombre, il le convertit en double, et j'aimerais m'arreter sur un caractère non numérique, afin de l'analyser.

J'ai tenté dans un premier temps de parser toute la chaine pour comprendre comment fonctionne la fonction de cette façon :

EDIT : j'ai un peu modifié le code, mais toujours la meme chose !

fgets(string, sizeof(string), stdin);
  clean(string, stdin);

  double number;
  char* end;

  number = strtod(string, &end);
  printf("%.2f\n", number);

  for (int count = 0; count <= strlen(string); count++) {
    number = strtod(end, &end);
    
    if (number == 0) {
      printf("operator : %c\n", string[count]);
      (*string) = string[count+1];      
    }
    else {
      printf("%.2f\n", number);      
    }
  }

si la chaine string contient "5 7 8 3", j'obtiens ce résultat :

5 7 + 8 *
> 5 7 + 8 *
5.00
7.00
operator :  
operator : 7
operator :  
operator : +
operator :  
operator : 8
operator :  
operator : *

Je précise que la chaine au départ est déclarée comme char string[1024]; (j'entre les données avec fgets). Pourquoi tous ces operator ? Je ne comprend pas d'où ils peuvent venir... en fait, je ne suis pas sur que j'utilise strtod convenablement. D'après moi, strtod lit la chaine passée en premier argument, et si le caractère est valide, elle stocke dans son second paramètre l'adresse de l'élement suivant...

Enfin, je planche un peu sur ce problème... Une idée serait la bienvenue !

Merci d'avance !
cool

Dernière modification par amwus (Le 17/03/2007, à 19:09)


Black holes are where god divided by zero...

Hors ligne

#2 Le 17/03/2007, à 14:18

amwus

Re : [Résolu] strtod C ?

personne ?


Black holes are where god divided by zero...

Hors ligne

#3 Le 17/03/2007, à 17:26

best_friend_fr

Re : [Résolu] strtod C ?

Salut

Le problème à mon avis est que tu as 2 curseurs décorrélés :
count augmente de 1 à chaque itération
end lui peut avancer de plus de 1 à chaque fois (typiquement, il saute tous les espaces).
Donc tu as des erreurs.


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#4 Le 17/03/2007, à 19:09

amwus

Re : [Résolu] strtod C ?

Oui c'est exactement ça ! j'ai résolu le probleme smile !


Black holes are where god divided by zero...

Hors ligne