9
votes

Comment accepter une certaine précision (tant de lieux de décimaux) dans Scanf?

in scanf () 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) Comment pouvons-nous le faire pour scanf () fonction.


8 commentaires

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);


Il n'y a pas de bonne raison de faire cela.


@Zanlynx est 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 . . . Vous devriez vraiment lire des chiffres de points flottants. scanf et printf 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.


4 Réponses :


3
votes

Vous ne pouvez pas faire cela, vous pouvez faire scanf () lire un nombre spécifique de caractères si vous le souhaitez comme xxx

et supposons que l'entrée soit < / p> xxx

il lira xxx

mais vous ne pouvez pas spécifier de précision.

Ça ne le fait pas t sens, ce que vous pouvez faire est xxx

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.


0 commentaires

0
votes

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).


0 commentaires

4
votes

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. xxx pré>

à 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>

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);
}


0 commentaires

0
votes
  1. inclure stdlib.h
  2. inclure math.h
  3. Si fonction pow à partir de math.h échoue à compiler, doit compiler avec fichier gcc.c -o fichier -lm
  4. Essayez exemple:

    entrée: 13254.45488

    sortie: 13254.45 xxx


1 commentaires

Le code a besoin de travail. 1) Char A [précision]; ... pour (i = 0; i <= précision; i ++) {A [i] = getchar (); ... 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 int . 4) si (z! = 0) est inutile. 5) échoue lorsque la partie d'entrée fractionnée est inférieure à précisions chiffres. 6) Problèmes mineurs avec acceptation d'une entrée comme "123 456" 123,45 plutôt que 123 et laissant 456 pour plus tard.