Счетчик где-то выключен - PullRequest
0 голосов
/ 22 апреля 2020

После работы на жадных / ок sh в CS50. сегодня меня накачали так как все работало правильно. Я вернулся и проверил значения, которые он предлагает -1,00, 0,00, foo, а затем, когда я попытался использовать положительное целое число, например 0,80, счетчик был неверным, добавив к нему дополнительные числа. Я предполагаю, что между проверкой на отрицательные значения, ноль и символы я должен был что-то сделать в своем коде, чтобы изменить его, как снова, я запустил 5 или более кодов, которые функционировали правильно. Я насквозь прочесал свой код и не могу понять, что сейчас сбивает мой счетчик. Может ли кто-нибудь указать мне, где искать?

Цель состоит в том, чтобы указать минимальное количество монет, которое можно использовать для данного количества изменений. Например, за 65 центов это будет 4 (две четверти, один цент, один никель)

Мой код указан ниже:

#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
    float change;
    do {
        change = get_float("Change owed:\n");
    } while (change <= 0);

    float cents;
    cents = round(change * 100);
    printf("%f cents \n", cents);
    int counter = 0;
    do {
        cents = cents - 25;
        counter = counter + 1;
    } while (cents >= 25);

    do {
        cents = cents - 10;
        counter = counter + 1;
    } while (cents >= 10);

    do {
        cents = cents - 5;
        counter = counter + 1;
    }
    while (cents >= 5);

    do {
        cents = cents - 1;
        counter = counter + 1;
    } while (cents >= 1);

    printf("%i \n" , counter);
}

Любое понимание приветствуется!

1 Ответ

0 голосов
/ 22 апреля 2020

Помните, что do..while выполняет как минимум один раз . 65 центов - хороший пример, он будет считать 2 четверти, десять центов, никель. cents равно 0. Но что будет дальше? Это будет считаться копейки! потому что он выполняет l oop перед тестом while.

...