2017-07-02 2 views
-2

Comment se fait-il que mon code n'imprime pas le int appelé coins? Je ne vois aucune erreur lors de l'exécution du système de débogage.Mon code n'imprime pas la variable appelée pièces

#include <cs50.h> 
#include <stdio.h> 

int main(void) 
{ // getting the user validation 
    printf("please enter a amount of change \n"); 

    int change = get_int(); 
    int coins = 0; 
    if (change > 0 && change <= 0 && change != 0) 
     printf("Change: %i\n", change); 

    if (change > 0) 
    { 
     printf("Change: %i\n", change); 
    } 

    if (change < 0) 
    { 
     printf("please enter a positve number \n"); 
    } 

    if (change == 0) 
    { 
     printf("Coins: 0 \n"); 
    } 
    //were it counts the amount of coins 


    float changef = (int)change; 
    float qaurter = 0.25; 
    float dime = 0.10; 
    float nickel = 0.05; 
    float penny = 0.01; 



    while (changef/qaurter) 
    { 
    coins++; 
    return changef - qaurter; 
    } 

    while (changef/dime) 
    { 
    coins++; 
    return changef - dime; 
    } 

    while (changef/nickel) 
    { 
    coins++; 
    return changef - nickel; 
    } 

    while (changef/penny) 
    { 
    coins++; 
    return changef - penny; 
    } 
    printf("Coins: %i\n",coins); 

} 
+0

Dans 'if (changez> && change <= 0 && change! = 0) 'les deux premières conditions ne peuvent pas être toutes les deux vraies. –

+0

S'il vous plaît apprendre à formater votre code, et le poster formaté. C'est énervant de lire du code non formaté. Utilisez '%' qui est l'opérateur du module. A côté, que voulez-vous dire par "n'est pas l'impression?" Lorsque vous traitez avec des devises, vous ne devriez pas utiliser 'float' et' doubles', cela conduirait à des résultats erronés à long terme. – Pablo

+1

Veuillez lire [Est-ce que le calcul à virgule flottante est cassé?] (Https://stackoverflow.com/questions/588004/is-floating-point-math-broken) Il y a * beaucoup de * questions "de changement" ici. Il est rarement satisfaisant d'utiliser des types à virgule flottante. –

Répondre

3

Vos boucles sont écrites avec return déclarations contenues dans les:

while (changef/qaurter) 
{ 
    coins++; 
    return changef - qaurter; 
} 

De retour de main() équivaut à la sortie du programme. Vous devez réviser le code pour éviter d'utiliser return dans les boucles. Par exemple (y compris une solution d'orthographe):

while (changef/quarter) 
{ 
    coins++; 
    changef -= quarter; 
} 

Bien franchement, vous pouvez éviter les boucles tout à fait:

int extra = changef/quarter; 
coins += extra; 
changef -= extra * quarter; 

Cependant, il y a plus de chirurgie à faire avant que ce possible, puisque vous ne faites que changer pour les nombres entiers de dollars, mais vous avez quarter et amis définis comme float variables avec des valeurs fractionnaires. Vous devez soit travailler en centimes seulement (int quarter = 25;), soit laisser l'utilisateur entrer une valeur à virgule flottante en premier lieu, ou ...

+1

Comme nous le savons, lire une valeur à virgule flottante et utiliser l'arithmétique à virgule flottante pour cette application simple demande plus de problèmes, à cause des problèmes de précision à virgule flottante. Mais c'est un outil très utile pour enseigner quelques concepts et pièges de base. – chqrlie