Выход из программы до окончания - PullRequest
0 голосов
/ 21 сентября 2018

Вопрос ниже контекста

Контекст: Для того, чтобы эта программа была отправлена ​​и работала правильно, мне нужно иметь возможность ввести 8,68 для суммы, которая сканируется вЗатем программа должна иметь возможность рассчитать, сколько нужно отдать монет каждого типа, а также остаток средств после того, как вы дадите x количество монет

Как должен выглядеть вывод

Вопрос / проблема: Моя программа будет работать до четверти и получит все правильно, как только доберется до центов,где он имеет 0 центов, программа прерывается и завершается. (Даже когда я вначале использую другое количество, оно сломается в другой точке, если количество монет, в данном случае у центов будет 0) Что я могу сделать, чтобы этобудет запускаться и завершаться так же, как показано выше.

Код:

#include <stdio.h>

int main()
{
    double amount;
    double GST = 1.13;
    double balance;
    int numLoonies;
    int numQuarters;
    int numDimes;
    int numNickels;
    int numPennies;
    int bal;

    printf("Please enter the amount to be paid: $"); //ask how much to be paid
    scanf("%lf", &amount);      //scans the input

    GST = amount * .13 + .005;

    printf("GST: 1.13\n");

    balance = (amount + GST);
    printf("Balance owing: $%.2lf\n", balance);

    numLoonies = balance;
    bal = ((balance - numLoonies)*100);

    printf("Loonies required: %d", numLoonies);
    printf(", balance owing $%1.2f\n", (float)bal/100);

    numQuarters = bal / 25;
    bal = bal % (numQuarters*25);

    printf("Quarters required: %d", numQuarters);
    printf(", balance owing $%1.2f\n", (float)bal / 100);

    numDimes = bal / 10;
    bal = bal % (numDimes * 10);

    printf("Dimes required: %d", numDimes);
    printf(", balance owing $%1.2f\n", (float)bal / 100);

    numNickels = bal / 5;
    bal = bal % (numNickels * 5);

    printf("Nickels required: %d", numNickels);
    printf(", balance owing $%1.2f\n", (float)bal / 100);

    numPennies = bal / 1;
    bal = bal % (numPennies * 1);

    printf("Pennies required: %d", numPennies);
    printf(", balance owing $%1.2f\n", (float)bal/100);

    return 0;
}

Обновление Так что это для школьного проекта, должен был упомянуть об этом, но я должен использовать мод, чтобы найти оставшийся баланс, и мне пришлось преобразовать двойное в int как часть критерия.

И да, у Канады больше нет копеек, но мне все еще нужно это делать

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Шаг 1 - Конвертируйте деньги в целые числа младшей единицы.

Поскольку код рассчитывается до «копейки», возьмите ввод и округлите / конвертируйте в целое число центов.

#include <math.h>
double amount;
printf("Please enter the amount to be paid: $"); //ask how much to be paid
scanf("%lf", &amount);
long iamount = lround(amount * 100);

То же самое с GST

double GST = 1.13;
long itax = lround(iamount * (GST - 1)); // round to the nearest penny
long ibalance = iamount + itax;
printf("Balance owing: $%.2lf\n", ibalance/100.0);

2) Продолжить разбивать на монеты

ОП bal = bal % (numCoins*CoinValue); - неправильный подход.

long CoinDenomination = 100; // 100 cents to the Loonie
long iLoonies = ibalance/CoinDenomination;
printf("Loonies required: %ld", iLoonies);
ibalance %= CoinDenomination;

...

CoinDenomination = 10; // 10 cents to the Dime
long iDimes = ibalance/CoinDenomination;
printf("Dimes required: %ld", iDime);
ibalance %= CoinDenomination;
0 голосов
/ 21 сентября 2018

Из-за способа вычисления numDimes он всегда будет давать правильный ответ, пока numDimes> 0. Но bal% 10 даст тот же результат.- Barmar

То, что я закончил, оказалось проще, чем я думал, я просто использовал мод номинал монеты .Спасибо за все комментарии:)

0 голосов
/ 21 сентября 2018

(Даже если в начале я использую другое количество, оно будет разрываться в другой точке, если количество монет, в этом случае десять центов, будет иметь значение 0)

Это большая подсказка.Итак, давайте посмотрим на десять центов ...

bal = bal % (numDimes * 10);

Итак, допустим, numDimes равно 0. Тогда (numDimes * 10) также равно нулю.Как вы думаете, что происходит, когда вы пытаетесь вычислить bal % 0?Если вы не уверены, вы можете вставить это выражение в свою программу и попробовать его.

Другая проблема заключается в том, что я не думаю, что вы действительно хотите сказать bal % (numDimes * 10).Допустим, numDimes получается 3 для некоторого начального баланса ... в этом случае у вас есть bal % (3 * 10) или bal % 30.Это действительно то, что вы хотите?Это даст некоторое число от 0 до 29, когда вы, вероятно, действительно хотите число, которое меньше значения одного цента.Если у меня есть 79 центов, и я вынимаю 7 центов, тогда 79 % 70 дает 9, что мне следовало оставить, но это не самый интуитивный способ добраться туда.

...