Как исправить вывод моей кассовой программы?

#c

#c

Вопрос:

Напишите программу на C для подсчета наличных в ящике кассового аппарата. Вы должны посчитать количество банкнот каждого достоинства в ящике. Вызовите функцию для определения суммы денег в каждом номинале, приняв номинал и количество купюр и вернув сумму. Функция также может принимать номер каждого номинала монеты и количество монет и возвращать сумму.

Ваша программа должна записывать каждый номинал, количество купюр / монет, сумму в долларах каждой и общую сумму денег в ящике.

Записывайте как на экран, так и во внешние данные. Формат является:

 Denomination    Number  Amount
------------------------------
.
.
.
.
.
.
.
------------------------------
Total           $
  
 int main() {

    setprecision (2);
    string d;
    int t;
    int tpenny;
    int tnickel;
    int tdime;
    int tquarter;
    int tone;
    int tfive;
    int tten;
    int ttwenty;
    int tfifty;
    int thundred;

    double penny;
    double nickel;
    double dime;
    double quarter;
    double one;
    double five;
    double ten;
    double twenty;
    double fifty;
    double hundred;

    cout << "Enter denomination and amount of bills/coins" << endl;
    cout << "(i.e. 'penny 5' = 0.05c, 'quarter 3' = 0.75c, 'twenty 2' = $40.00)" << endl;
    cout << "When all amounts have been entered, enter 'done'" << endl;

    while (d != "done") {

        double total = penny   nickel   dime   quarter   one   five   ten   twenty   hundred;

        cin >> d;

        if (d == "done") {

            cout << "Denomination     " << "Number     " << "Amount" << endl;
            cout << "-----------------------------------" << endl;
            cout << "Penny:             " << tpenny << "         " << "$" << penny << endl;
            cout << "Nickel:            " << tnickel << "         " << "$" << nickel << endl;
            cout << "Dime:              " << tdime << "         " << "$" << dime << endl;
            cout << "Quarter:           " << tquarter << "         " << "$" << quarter << endl;
            cout << "One:               " << tone << "         " << "$" << one << endl;
            cout << "Five:              " << tfive << "         " << "$" << five << endl;
            cout << "Ten:               " << tten << "         " << "$" << ten << endl;
            cout << "Twenty:            " << ttwenty << "         " << "$" << twenty << endl;
            cout << "Fifty:             " << tfifty << "         " << "$" << fifty << endl;
            cout << "Hundred:           " << thundred << "         " << "$" << hundred << endl;
            cout << "-----------------------------------" << endl;
            cout << "Total:                       " << "$" << total << endl;
        }
        else {

            cout << "Enter additional currency. (if done, type 'done')" << endl;

            cin >> t;

            if (d == "penny") {
                tpenny = t;
                penny = value (d, t);
            }
            if (d == "nickel") {
                tnickel = t;
                nickel = value (d, t);
            }
            if (d == "dime") {
                tdime = t;
                dime = value (d, t);
            }
            if (d == "quarter") {
                tquarter = t;
                quarter = value (d, t);
            }
            if (d == "one") {
                tone = t;
                one = value (d, t);
            }
            if (d == "five") {
                tfive = t;
                five = value (d, t);
            }
            if (d == "ten") {
                tten = t;
                ten = value (d, t);
            }
            if (d == "twenty") {
                ttwenty = t;
                twenty = value (d, t);
            }
            if (d == "fifty") {
                tfifty = t;
                fifty = value (d, t);
            }
            if (d == "hundred") {
                thundred = t;
                hundred = value (d, t);
            }
        }
    }
    return 0;
}
  

Способ, которым я написал свой код на данный момент, работает, но только если для каждой отдельной валюты введено значение. Например, если я не ввожу значение для пяти, моя сумма равна какому-то сумасшедшему числу, а значение по умолчанию для числа не равно 0.

У вас есть какие-либо идеи о том, как это исправить? Также value — это функция, которая считывает строку и значение int (например, 5 пенни) и возвращает денежное значение.

Комментарии:

1. Это классическое задание, используемое для обучения вас ошибкам с плавающей запятой. Поскольку вам не нужно иметь дело с долями цента, я бы предложил провести рефакторинг вашей программы, чтобы использовать целочисленные центы вместо плавающих или двойных долларов. На этом сайте приведены некоторые основы ошибок с плавающей запятой: 0.30000000000000004.com

2. Продолжай и инициализируй свои переменные безопасным начальным значением.

Ответ №1:

Вы пробовали инициализировать все ваши объявленные переменные равными 0? Некоторые языки / наборы компиляторов не пытаются думать, что вам нужно значение 0 для новых переменных, и вы собираетесь получить все, что находится в этой ячейке памяти из предыдущего.

Комментарии:

1. Поскольку язык помечен как C , я бы изменил some в некоторых языках / компиляторе на most.

2. Спасибо. Idk, почему я не подумал инициализировать переменные, когда я их объявлял, но теперь это работает!