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.
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);
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);
Vous utilisez une séquence de formatage incorrecte pour double
, vous devez utiliser %lf
au lieu de %ld
:
double a;
scanf("%lf",&a);
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
Utiliser %lf
vous aidera à résoudre ce problème.
Utilisation :
scanf("%lf",&doub)