Salut tout le monde,
je suis un étudiant débutant en langage C, j'ai eu une idée de crée un clone de printf, et en cours de développement j'ai eu un problème avec la fonction qui me renvoie le nombre de caractère qui représentent un double.
ma fonction s'appelle len_real(double reel_d), voila son corps:

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
int len_real(double reel_d)
{
    int len = 0, intp;    // decp: partie entière
    double floatp;           // partie flottante
 
    floatp = reel_d - (int)reel_d;     // calcule la partie flottante
 
    // on calcule la partie entière (ici ça marche)
    decp = (int)(reel_d - floatp); 
 
    // Longueur de floatp
    while(floatp != 0.0)
    {
     floatp *= 10;      // exemple: 0.98765 devient 9.8765
     floatp -= (int)floatp;     // exemple: 9.8765 devient 0.8765
     len++;   
    }
   /* après on remarque que la boucle n'a pas bien marché,
      quand elle arrive à la phase où floatp == 5.0, la deuxième ligne donne un
      comportement bizarre, (int)floatp nous renvoie 4 à la place de 5 (la partie entière de 5.0)
    */
 
/* Jusqu'ici len contiendra le nombre de caractères qui representent la partie flottante*/
 
    len += len_int(intp); 
/* on ajoute le nombre de caractères de la partie entière avec la fonction len_int(int entier) que j'ai déjà déclaré*/
    len++; // et enfin on ajoute 1 pour la virgule
    return len;
}

dans main()

j'ai fait l'appel suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
double a = 1234.98765;
printf("%i\n",len_real(a));

donc si vous pouvez m'indiquer où j'ai l'erreur, ou bien si c'est le défaut de l'opérateur du casting, dites moi s'il y a une autre fonction capable de donner la partie entière.

et Merci d'avance ^^