web-dev-qa-db-fra.com

Lecture en double valeurs avec scanf en c

J'essaie de lire 2 valeurs à l'aide de scanf () en C, mais les valeurs que le système écrit en mémoire ne sont pas égales à mes valeurs entrées. Voici le code:

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);

Si j'entre 1 et 2, CMD renvoie un correct, mais b = -858993460 Voici ce que j'ai déjà essayé: En utilisant float ou int au lieu de double, en utilisant scanf_s, en utilisant scanf ("% d ou% f pour% i ou% li ou% lf ou% e ou% g), en utilisant fflush (stdin) pour vider le tampon du clavier, en commençant par b, en essayant comme toutes les combinaisons possibles. J’ai découvert qu’il y avait un problème de longueur du double sur 32 bit OS, de sorte que vous êtes obligé d’utiliser scanf ("% lf", & f) pour lire un double. Quoi que je fasse, la deuxième valeur est toujours fausse.

J'utilise MS VS Express 2012 pour Desktop sous Windows 7 32 bits.

31
user1880009

Utilisez le spécificateur de format %lf pour lire un double:

double a;
scanf("%lf",&a);

Wikipedia a une référence décent pour les spécificateurs de format disponibles.

Vous devez également utiliser le spécificateur de format %lf pour imprimer les résultats:

printf("%lf %lf",a,b);
63
simonc

Autant que je sache, %d signifie décadique, qui est un nombre sans virgule décimale. si vous voulez charger une double valeur, utilisez la conversion %lf (long float). pour printf, vos valeurs sont incorrectes pour la même raison, %d est utilisé uniquement pour les nombres entiers (et éventuellement les caractères si vous savez ce que vous faites).

Exemple:

double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n"); 
scanf("%lf",&b);
printf("%lf %lf",a,b);
6
Kyborek

Vous utilisez une séquence de formatage incorrecte pour double, vous devez utiliser %lf au lieu de %ld:

double a;
scanf("%lf",&a);
3
piokuc

Le spécificateur de format dans printf doit être %f pour les types de données doubl puisque les styles de données float sont finalement convertis en types de données double dans printf.

Il n'y a aucune disposition pour imprimer des données float. Veuillez trouver la discussion ici: Corriger le spécificateur de format pour double in printf

1
Biswajit Roy

Utiliser %lf vous aidera à résoudre ce problème.

Utilisation :

scanf("%lf",&doub)
0
Akshansh