problème affichage des doubles

Bonsoir
J’ai fait ce programme qui calcul une valeur approchée de la racine carrée d’un nombre en utilisant des flottants :

#include <stdio.h>
#include <stdlib.h>
int main ()
{
float n ;
int r, i ;
float res = 1 ;
printf("Entrez un nombre !!\n") ;
while (scanf("%f", &n) == 0) getchar () ;
printf("Entrez le rang de calcul !!\n") ;
while (scanf("%d", &r) == 0) getchar () ;
for (i=1; i<=n; i++) res = (n/res + res) / 2 ;
printf("racine carrée de %.2f au rang %d : %.20f\n",n,r,res) ;
return EXIT_SUCCESS ;
}

Ce programme ayant un problème de précision, j’ai remplacé les déclarations float par double, mais maintenant printf m’affiche n’importe quoi !!

Merci pour votre aide

petite rectification : remplacer n par r dans la boucle for.
cela ne change rien à mon problème !!

[quote="man scanf"]
The following type modifier characters can appear in a conversion specification:
[...]
       l      Indicates either that the conversion will be one of d, i, o, u, x, X, or n and the next pointer is a pointer to a long int or unsigned long int (rather than int), or that the conversion will be one of e, f, or  g  and the  next pointer is a pointer to [b]double[/b] (rather than [b]float[/b]).
[...]
f      Matches an optionally signed floating-point number; the next pointer must be a pointer to [b]float[/b].
[/quote]

J’ai résolu le problème en lisant un flotant avec scanf mais comment faire pour lire une variable de type double avec un scanf ?
Merci

C’est (presque) marqué dans mon message précédent.

Loin de moi l’idée de vouloir paraître désagréable, mais savoir “lire le manuel” (comprendre la documentation / faire des recherches par soi-même / etc) est absolument indispensable pour tout programmeur, et un programmeur débutant doit apprendre ça aussi, car c’est une partie intégrante du “savoir programmer”.
Je pense que c’est beaucoup mieux pour toi si tu cherches cette info par toi-même (surtout que je t’ai donné des sacrées pistes là, et que l’info est facile à trouver – j’ai mis moins de 10 minutes à trouver le problème dans ton programme, chercher et lire la doc correspondante, et enfin corriger, alors que je n’utilise pour ainsi dire jamais scanf/printf et que je n’ai donc qu’une très vague idée de comment ils fonctionnent).

Par contre ce que je peux faire c’est t’expliquer comment j’ai procédé pour trouver l’origine du problème. Normalement j’aurais tendance à afficher la valeur des différentes variables, mais vu que là ça semblait être un problème d’affichage justement, j’ai fait l’inverse : j’ai donné des valeurs arbitraires aux variables et j’ai regardé si elles s’affichaient bien (c’était le cas) donc le problème ne pouvait venir que de l’entrée, à savoir le scanf("%f"…). J’ai cherché la doc de cette fonction sur internet et le tour est joué. :wink:

En bref, pour corriger un bug :

  • trouver sa cause en procédant par élimination
  • comprendre pourquoi le code en question est mauvais, souvent en se rapportant à la doc correspondante pour vérifier qu’on utilise correctement la fonction
  • corriger le code en fonction de ce que dit la doc

Bon courage.

La seule solution que j’ai trouvée est de lire une chaine de caractère et de faire appel à la fonction de conversion strtod.
Cela ne me semble pas terrible comme solution mais ça marche, c’est déjà ca :mrgreen:


C'est dans le man.

C’est dans le man.

Ok, merci !!
Après coup je comprends maintenant ce que dis le texte …