nouvelle fonction....nouveau probleme...

le programe plante quand je met un "."
alors qu'il est censé convertir la chaine en double....


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
void detect_nb_flottant(struct string l)
{
 
    double nb_tmp=0.;
    int i=0;
    struct elem *pelem = l.first;
    struct elem *point_droite;
 
    struct elem *point_gauche;
 
 
    while(pelem!=NULL )
    {
 
        if (pelem->type == point) //on recherche le point
        {
            point_droite=pelem->prev; //premier element a droite du point
            point_gauche=pelem->next; //premier element a gauche du point
 
            while(point_gauche->type == number && point_gauche !=NULL) //on verifie que l'element est bien un chiffre
            {
                /* on calcul toute la partie gauche grace a la boucle (lecture de droite a gauche) */
                nb_tmp=nb_tmp+(((point_gauche->value)-48)*pow(10,i)); // lorsqu'on li les unité i =0, les disaines i=1, les centaines i=2
 
                i++;
 
                point_gauche = point_gauche->next; //on passe a point_gauche etant l'element de gauche qu'on test, on passe a l'element suivant
                free(pelem->next); //on detruit l'element testé
                pelem->next=point_gauche; //on remet a jour les pointeurs
                pelem->next->prev=pelem; //on remet a jour les pointeurs
 
                }
                //une fois la boucle terminée, l'element contenant le point va pointer sur l'element qui est apres les chiffre
                i=-1;
 
            //on fais pareil pour les chiffre apres la virgule (lecture de gauche a droite)
 
             while(point_droite->type == number && point_droite !=NULL){
                nb_tmp=nb_tmp+(((point_droite->value)-48)*pow(10,i));
                i--;
 
                point_droite = point_droite->prev;
                free(pelem->prev);
                pelem->prev=point_droite;
                pelem->prev->next=pelem;
 
                }
 
 
 
 
        pelem->value=nb_tmp;
        pelem->type=number;
 
        }i=0;
 
        pelem = pelem->next;
 
 
 
        }
 
 
    }