Comment faire pour accepter une certaine précision (plusieurs décimales places) dans le scanf?
Dans scanf()
fonction je veux prendre seulement jusqu'à des valeurs décimales.Pouvons-nous y parvenir?
Par exemple pour l'affichage jusqu'à deux décimales nous utilisons printf("%.2f",A)
Comment pouvons-nous faire pour scanf()
fonction.
Scanf utilise pratiquement le même format.
Lire l'intégralité de la valeur, et d'imprimer le 2 décimales à l'aide de
Il y a est une bonne raison - comme en témoigne l'argent (UI) champs qui n'accepte que les 2 décimales pour les USD, par exemple. scanf - être une primitive lecteur de flux - tout ne rentre pas dans les cas d'utilisation et ne prend pas en charge le comportement demandé. (Et puis il y a toute la question de la précision relative / flotteurs non-fixe.. mais c'est presque secondaire, car il n'est même pas un moyen de limiter le nombre de décimales si lire une chaîne de caractères.)
Re: "lors de l'affichage de la variable il s'affiche comme 0.00000": Cette phrase trahit une profonde incompréhension de ce que votre variable en fait est . . . vous devriez vraiment lire les nombres à virgule flottante.
Soit la valeur de l'argent est de l'argent réel dans ce cas, il est un entier en cents, flottent PAS, ou il est calculé de la valeur, auquel cas la plus de précision, le mieux.
Lire l'intégralité de la valeur, et d'imprimer le 2 décimales à l'aide de
printf("%.2f\n", value);
Il y a est une bonne raison - comme en témoigne l'argent (UI) champs qui n'accepte que les 2 décimales pour les USD, par exemple. scanf - être une primitive lecteur de flux - tout ne rentre pas dans les cas d'utilisation et ne prend pas en charge le comportement demandé. (Et puis il y a toute la question de la précision relative / flotteurs non-fixe.. mais c'est presque secondaire, car il n'est même pas un moyen de limiter le nombre de décimales si lire une chaîne de caractères.)
Re: "lors de l'affichage de la variable il s'affiche comme 0.00000": Cette phrase trahit une profonde incompréhension de ce que votre variable en fait est . . . vous devriez vraiment lire les nombres à virgule flottante.
scanf
et printf
ne faites pas ce que vous en pensez.Soit la valeur de l'argent est de l'argent réel dans ce cas, il est un entier en cents, flottent PAS, ou il est calculé de la valeur, auquel cas la plus de précision, le mieux.
OriginalL'auteur mani teja varma | 2015-01-25
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire cela, vous pouvez faire
scanf()
lire un nombre spécifique de caractères si vous voulezet supposons que l'entrée est
il va lire
mais vous ne pouvez pas spécifier de précision.
Ça n'a pas de sens, ce que vous pouvez faire est de
après tout, la précision est limitée par la représentation binaire, de sorte qu'il n'ont que deux décimales est inutile puisqu'dans des opérations arithmétiques, il pourrait être arrondis.
OriginalL'auteur Iharob Al Asimi
scanf()
ne dispose pas d'une méthode simple pour répondre à l'OP de l'objectif.Vous recommandons d'utiliser
fgets()
pour l'entrée et ensuite d'analyser la chaîne.De limiter à 2 le nombre de décimales, le code peut lire le nombre de parties: partie entière et d'une fraction, puis forme le résultat:
Même si cela répond à l'OP s quest, je ne pense pas qu'il résout des OP objectif plus vaste. Donc, plutôt que de limiter les entrées, lire les commentaires et puis le qualifier:
D'autres plus pédant méthodes serait d'inspecter la chaîne
buf
pour ddd...ddd.dd syntaxe, etc. Mais la question est claire: lire les données, puis de qualifier les données à lire. Ne tentez pas de limiter la saisie.OriginalL'auteur chux
il n'est pas possible de mentionner la précision dans le scanf. Vous pouvez toutefois limiter le nombre de caractères d'entrée comme scanf("%4f",&a).
OriginalL'auteur Saisujithreddy
pow
demath.h
ne parvient pas à compiler, doit compiler avecgcc file.c -o file -lm
char a[precision] ;... for ( i = 0 ; i <= precision ; i++ ) { a[i] = getchar(); ...
UB (dépassement de tampon). 2) ne parvient pas pour les nombres négatifs. 3) Échoue lorsque l'ensemble du numéro de port est à l'extérieur deint
gamme. 4)if ( z != 0 )
est inutile. 5) échoue lorsque les fractions d'entrée de la partie est de moins deprecisions
chiffres. 6) problèmes mineurs avec l'acceptation d'une entrée comme"123 456"
comme 123.45 plutôt que de 123 et laissant 456 pour plus tard.OriginalL'auteur ipont AVum