2016-07-25 2 views
-1

Я пытаюсь решить проблему жадности для CS50, но она не вычисляется правильно. Я всегда остаюсь с 0,01 вместо 0,00 от стоимости отдыха. Все работает гладко, за исключением копейки в конце. Я не уверен, что делать. Когда вы вводите изменение, попробуйте 9.99. По количеству без гроши он отлично работает.Подборка недопустима в моем коде

Большое спасибо!

int main() 
{ 
    // declaring variables for coins 

    float const qtr = 0.25; 
    float const dimes = 0.10; 
    float const nick = 0.05; 
    float const penny = 0.01; 

    //declaring variables for coin counters 

    int qtr_count = 0; 
    int dimes_count = 0; 
    int nick_count = 0; 
    int penny_count = 0; 

    //declaring variables for total debt and rest of debt 

    float total; 
    float rest; 

    //loop for testing is the number entered valid 

    do 
    { 
     printf("Enter the ammount of money he owns:\n"); 
     scanf("%f", &total); 
    } 
    while (total < 0.00) ; 

    rest = total; 

    //Loop for calculating coins 

    while (rest >= qtr) 
    { 
     qtr_count++; 
     rest -= 0.25; 
    } 

    while (rest >= dimes) 
    { 
     dimes_count++; 
     rest -= 0.10; 
    } 

    while (rest >= nick) 
    { 
     nick_count++; 
     rest -= 0.05; 
    } 

    while (rest >= penny) 
    { 
     penny_count++; 
     rest -= 0.01; 
    } 

    printf("You need go give: \n %i quarters, \n %i dimes, \n %i nick, \n %i pennies \n", qtr_count, dimes_count, nick_count, penny_count); 

    return 0; 

} 
+2

Денежные расчеты, подобные этому, могут быть выполнены исключительно с помощью ints. Вы просто умножаете то, что вам нужно на 100. Вероятно, это будет работать и на малой скорости. – StoryTeller

ответ

0

Проблема, вероятно, в том, что операции с плавающей точкой не всегда точны. Я предлагаю вам использовать только целые числа. Заставьте человека ввести сумму в центах (или умножить на 100). Таким образом, вы не столкнетесь с проблемами с операциями с плавающей запятой, и это также будет более эффективным.

Смежные вопросы