in scanf () code> Fonction Je veux prendre uniquement des valeurs décimales. Pour y parvenir?
Par exemple, pour afficher jusqu'à deux décimales, nous utilisons
printf ("%. 2f", a) code>
Comment pouvons-nous le faire pour
scanf () code> fonction. P>
4 Réponses :
Vous ne pouvez pas faire cela, vous pouvez faire et supposons que l'entrée soit < / p> il lira p> mais vous ne pouvez pas spécifier de précision. p> Ça ne le fait pas t sens, ce que vous pouvez faire est p> après tout, la précision est limitée par la représentation binaire, ce qui ne fait que deux décimales est inutile car dans des opérations arithmétiques Il pourrait être arrondi. p> p> scanf () code> lire un nombre spécifique de caractères si vous le souhaitez comme
Il n'est pas possible de mentionner la précision dans scanf. Vous pouvez toutefois restreindre le nombre de caractères d'entrée tels que Scanf ("% 4f" et a). P>
à limiter à 2 décimales, le code pourrait lire le nombre en parties: une partie entière et une fraction , puis formez le résultat: p> scanf () code> n'a pas de méthode simple pour rencontrer l'objectif de OP.
Recommander à l'aide d'utiliser fgets () code> pour l'entrée, puis d'analyser la chaîne.
double value;
if (sscanf(buf, "%lf %n", &value, &n) != 1 || buf[n]) {
Handle_InvalidInput();
}
double rounded_value = round(value * 100.0)/100.0;
if (rounded_value != value) {
Handle_OverlyPreciseNumber(value, rounded_value);
}
pow code> à partir de math.h code> échoue à compiler, doit compiler avec fichier gcc.c -o fichier -lm code> li >
- Essayez exemple: li>
entrée: 13254.45488 P>
sortie: 13254.45 P>
blockQuote> xxx pré> ol>
Le code a besoin de travail. 1) Char A [précision]; ... pour (i = 0; i <= précision; i ++) {A [i] = getchar (); ... code> est UB (dépassement tampon). 2) échoue pour des nombres négatifs. 3) échoue lorsque le port de numéro entier est en dehors de la plage code> int code>. 4)
si (z! = 0) code> est inutile. 5) échoue lorsque la partie d'entrée fractionnée est inférieure à
précisions code> chiffres. 6) Problèmes mineurs avec acceptation d'une entrée comme
"123 456" code> 123,45 plutôt que 123 et laissant 456 pour plus tard.
Scanf utilise presque le même format.
Pourquoi voudriez-vous faire cela?
Je l'ai essayé. Tout en essayant d'afficher la variable, elle affichée comme 0.00000
Lisez la valeur entière et imprimez les 2 décimales en utilisant
printf ("%. 2f \ n", valeur); code>
Il n'y a pas de bonne raison de faire cela.
@Zanlynx est I> une bonne raison - comme en témoigne des champs d'argent (UI) qui accepte uniquement 2 décimales pour USD, par exemple. SCANF - Être un lecteur de flux primitif - ne correspond pas à l'utilisation de l'utilisation et ne prend pas en charge le comportement demandé. (Et puis il y a toute la question de la précision relative / des flotteurs non fixe .. mais c'est presque secondaire car il n'y a même pas un moyen de limiter les décimales si elle est lue comme une chaîne.)
@manitejavarma: Re: "Tout en essayant d'afficher la variable, elle affichée à 0,00000": cette affirmation trahit un malentendu très profond de votre variable est i>. . . Vous devriez vraiment lire des chiffres de points flottants.
scanf code> et
printf code> Ne faites pas ce que vous pensez.
@ user2864740: soit la valeur monétaire est de l'argent réel auquel cas il s'agit d'un entier en centimes, pas de flotter ou est une valeur calculée auquel cas plus de précision, mieux c'est.