Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » C & Cie. » strtod en C

Francesco
Modérateur
RemonterCiter Linux Mozilla 5 - Posté le 17/03/2007 à 18:41
Pour les operator vide qui apparaissent à la fin, c'est relativement simple. Comme déjà dit plus haut, il y a deux itérateurs dans ta boucle for.

Le souci est que c'est l'opérateur count qui régit la boucle for. C'est à dire que si la variable "end" a fini de parcourir la chaine de caractères, ce n'est pas le cas pour count, d'où l'affichage dans le vide !

Si tu veux te débarrasser du test, je pense que le plus simple est d'utiliser une boucle while au lieu d'une boucle for, et d'enlever l'itérateur count


while (end[0] != 0)
{
number = strtod(end, &end);

if (number == 0) {
printf("operator : %c\n", end[0]);
end++;
}
else {
printf("%.2f\n", number);
}
}

Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Amwus
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 17/03/2007 à 18:48
oui oui je suis d'accord, mais initialement, je fais un strtod(string, &end); pour le premier élement. Ensuite je lance la boucle comme ci dessus.

Ce que je voudrais, c'est n'avoir qu'une boucle et qu'un strtod. Mais pour ça, il faut qu'à la fin de la boucle, string pointe vers end...

Tu vois ce que je veux dire ?

En tout cas, ça marche bien le while, ce probleme est résolu ! Plus qu'un et le reste de mon programme sera plus simple ! (sourire)



Edité par Amwus ( 17/03/2007 18:50:24 )
"Engl Amps are the best i've ever used... Not only are they powerfull, but they have charachter too..." R. Blackmore
Francesco
Modérateur
RemonterCiter Linux Mozilla 5 - Posté le 17/03/2007 à 20:34
Si tu veux un seul strtod, pourquoi ne pas faire end = string avant la boucle ? Cela devrait suffir je pense non ?

Ou sinon, tu remplaces tout tes "end" par des string et cela devrait marcher aussi, mais dans ce cas là, tu perds la référence sur le début de la chaine, à moins de la sauvegarder dans un autre pointeur...

Edité par Francesco ( 17/03/2007 20:35:59 )
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Amwus
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 18/03/2007 à 00:12
alors j'ai fais un end = string et ça compile... mais j'aimerais comprendre maintenant (sourire) !

Moi j'aurais plutot fait string = end puisque je fais un strtod(string, &end), donc au prochain tour, c'est string qui devient end non ?

Mais quand je fais string = end j'ai une erreur de types incompatibles...

Sinon, maintenant ça compile bien tout... bon j'ai une erreur de segmentation mais elle doit venir d'ailleurs (sourire)
"Engl Amps are the best i've ever used... Not only are they powerfull, but they have charachter too..." R. Blackmore
Amwus
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 18/03/2007 à 00:16
quoi que... en déboguant, je vois que l'erreur de segmentation arrive pil au début de la boucle, à l'endroit while (end[0] != 0)...

Peut etre que c'est du au end = string ? Et encore, c'est bizarre puisqu'encore aucune itération n'a eu lieu...
"Engl Amps are the best i've ever used... Not only are they powerfull, but they have charachter too..." R. Blackmore
Francesco
Modérateur
RemonterCiter Linux Mozilla 5 - Posté le 18/03/2007 à 00:57
tu peux reposter ton code stp ? Afin que l'on puisse avoir une idée. Car avec les modif qui ont été faites, je suis perdu (héhé)
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Amwus
ProgBoarder
RemonterCiter Linux Firefox 2 - Posté le 18/03/2007 à 08:46
je vais te l'envoyer par mail si tu veux bien... je préfère ne pas trop poster d'élements ici... (sourire)

EDIT: envoyé (clein d'oeil)

Edité par Amwus ( 18/03/2007 08:49:50 )
"Engl Amps are the best i've ever used... Not only are they powerfull, but they have charachter too..." R. Blackmore
davou4670
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/03/2007 à 21:50

double nbr;
nbr = strtod(chaine, &end);
printf("%.2f\n", nbr);
while (end[0] != 0) {
nbr = strtod(end, &end);
if (nbr == 0) {
printf("operator : %c\n", end[0]);
end++;
}
else {
printf("%.2f\n", nbr);
}
}



Voilà j'ai ceci, mon problème est que il m'affiche à chaque fois l'espace lorsque c'est un opérateur :

operator :
operator : *
operator :
operator : +

que dois je faire pour ne pas afficher l'espace?
davou4670
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/03/2007 à 21:56
Désolé d'avoir mis 2 fois le même posts je ne l'ai pas fais exprès (EDIT : post en double supprimé...)

J'ai corrigé mon petit problème :

double nbr;
nbr = strtod(chaine, &end);
printf("%.2f\n", nbr);
while (end[0] != 0) {
nbr = strtod(end, &end);
if (nbr == 0) {
if (end[0] != ' ')
printf("operator : %c\n", end[0]);
end++;
}
else {
printf("%.2f\n", nbr);
}
}



Edit 2 : Encore le même message en double..ca commence à faire ! (langue)

Edité par neamar ( 18/03/2007 22:03:22 )
Edité par neamar ( 18/03/2007 22:05:13 )

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,059 s - Crédits - Stats
1 connecté