如何使用用户定义的函数在 C++ 中创建累加器?

How do I create an accumulator in C++ using a user defined function?

我试图保持 运行 杯咖啡的售出总数,我必须使用用户定义的函数来完成它。我已经尝试了附加代码的多种变体,但似乎没有任何效果。我究竟做错了什么?另外,我是 C++ 的新手,所以它看起来很业余!

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

using namespace std;

const int SM_OZ = 8;
const int MD_OZ = 12;
const int LG_OZ = 16;

const double SM_PRICE = 1.19;
const double MD_PRICE = 1.49;
const double LG_PRICE = 1.89;
const double TAX = .0825;

void amtSold(int &smtCup, int &mdtCup, int &lgtCup);

int main()
{
    int selection;
    int smCup;
    int mdCup;
    int lgCup;

    int smtCup;
    int mdtCup;
    int lgtCup;

    smCup = 0;
    mdCup = 0;
    lgCup = 0;


    do 
    {
        cout << "COFFEE SHOP" << endl;
        cout << "1. Sell Coffee" << endl;
        cout << "2. Total Number of Cups Sold" << endl;
        cout << "3. Total Amount of Coffee Sold" << endl;
        cout << "4. Total Amount of Money made" << endl;
        cout << "0. Exit" << endl;
        cout << "Type a number to continue: ";
        cin >> selection;
        cout << endl;


        //loop through the solutions based on the user's selection
        switch (selection)
        {
        case 1:
            cout << "How many small cups of coffee: ";
            cin >> smCup;
            cout << "How many medium cups of coffee: ";
            cin >> mdCup;
            cout << "How many large cups of coffee: ";
            cin >> lgCup;

            system("cls");

            cout << fixed << setprecision(2) << endl;

            //Sale Coffee Receipt Page
            cout << "COFFEE SHOP" << endl;
            cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl;
            cout << "Small: " << setw(18) << smCup << setw(18) << SM_PRICE << setw(18) << smCup*SM_PRICE << endl;
            cout << "Medium: " << setw(17) << mdCup << setw(18) << MD_PRICE << setw(18) << mdCup*MD_PRICE << endl;
            cout << "Large: " << setw(18) << lgCup << setw(18) << LG_PRICE << setw(18) << lgCup*LG_PRICE << endl;
            cout << "Subtotal: " << setw(51) << (smCup*SM_PRICE)+(mdCup*MD_PRICE)+(lgCup*LG_PRICE) << endl;
            cout << "Tax: (8.25%)" << setw(49) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX << endl;
            cout << "Total: " << setw(54) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))+(((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX) << endl;
            cout << endl;
            cout << endl;

            break;

        case 2:
            //Total Number of Cups Sold
            cout << "REPORT - NUMBER OF COFFEE CUPS SOLD" << endl;

            amtSold(smtCup, mdtCup, lgtCup);
            cout << "SIZE" << setw(21) << "Number" << endl;
            cout << "Small: " << setw(18) << smCup << endl;
            cout << "Medium: " << setw(17) << mdCup << endl;
            cout << "Large: " << setw(18) << lgCup << endl;
            cout << endl;
            cout << endl;

            break;

        case 3:
            //Total Amount of Coffee Sold
            cout << "REPORT - AMOUNT OF COFFEE SOLD" << endl;

            cout << "SIZE" << setw(21) << "Number" << setw(18) << "OZ" << endl;
            cout << "Small: " << setw(18) << smCup << setw(18) << smCup*SM_OZ << endl;
            cout << "Medium: " << setw(17) << mdCup << setw(18) << mdCup*MD_OZ << endl;
            cout << "Large: " << setw(18) << lgCup << setw(18) << lgCup*LG_OZ << endl;
            cout << "Total: " << setw(36) << (smCup*SM_OZ) + (mdCup*MD_OZ) + (lgCup*LG_OZ) << endl;
            cout << endl;
            cout << endl;

            break;

        case 4:
            //Total Amount of Money made
            cout << "COFFEE SHOP - REPORT MONEY MADE" << endl;

            cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl;
            cout << "Small: " << setw(18) << smCup << setw(18) << SM_PRICE << setw(18) << smCup*SM_PRICE << endl;
            cout << "Medium: " << setw(17) << mdCup << setw(18) << MD_PRICE << setw(18) << mdCup*MD_PRICE << endl;
            cout << "Large: " << setw(18) << lgCup << setw(18) << LG_PRICE << setw(18) << lgCup*LG_PRICE << endl;
            cout << "Subtotal: " << setw(51) << (smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE) << endl;
            cout << "Tax: (8.25%)" << setw(49) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX << endl;
            cout << "Total: " << setw(54) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE)) + (((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX) << endl;
            cout << endl;
            cout << endl;

            break;

        case 0:

            system("cls");

            break;

        default:
            //notify the user that an invalid selection has been inputted
            cout << "You have made an invalid selection. Please choose a number from the list." << endl;
            cout << endl;

        }

    } while (selection != 0);


    system("pause");
    return 0;

}

void amtSold(int &smtCup, int &mdtCup, int &lgtCup)
{
    int smCup;
    int mdCup;
    int lgCup;

    smCup = 0;
    mdCup = 0;
    lgCup = 0;

    smtCup += smCup;
    mdtCup += mdCup;
    lgtCup += lgCup;

}

因此,您可能知道,您没有跟踪销售的每种尺寸的咖啡杯(即 smtCup、mdtCup 和 lgtCup)的数量。

我假设这些变量表示每种尺码的总杯数,您可能想在变量声明步骤中添加一些注释。您需要将变量初始化为 0:

int smtCup = 0;
int mdtCup = 0;
int lgtCup = 0;

由于这是一个相当简单的程序,您可以在不使用 amtSold 函数的情况下执行累积,因此您可以删除它。

然后,对于 switch 语句的情况 1,每次更新值时都需要更新 smtCup、mdtCup 和 lgtCup。请注意,smCup、mdCup 和 lgCup 仅用于此程序中的输入。

cout << "How many small cups of coffee: ";
cin >> smCup;
cout << "How many medium cups of coffee: ";
cin >> mdCup;
cout << "How many large cups of coffee: ";
cin >> lgCup;

smtCup += smCup;
mdtCup += mdCup;
lgtCup += lgCup;

以后其他情况下调用smtCup、mdtCup、lgtCup就可以打印出小杯、中杯、大杯的总数了!将案例2-4的smCup、mdCup、lgCup改为smtCup、mdtCup、lgtCup。希望这可以帮助!

编辑:无法发表评论,所以我只想说欢迎你!

谢谢KTing!令人失望的是,我使用我的代码的早期版本更接近正确答案。我无法弄清楚为什么它不会初始化,所以我开始绝望并尝试我 95% 确定不会工作的东西。我最终采用了以下解决方案。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

using namespace std;

//Constant for size of cup of coffee 
const int SM_OZ = 8;
const int MD_OZ = 12;
const int LG_OZ = 16;

//Constant for price of cup of coffee and Tax
const double SM_PRICE = 1.19;
const double MD_PRICE = 1.49;
const double LG_PRICE = 1.89;
const double TAX = .0825;

int main()
{
    //declare and initialize the variables for the individual cups of coffee
    int selection;
    int smCup = 0;
    int mdCup = 0;
    int lgCup = 0;

    //declare and initialize the variables for the total cups of coffee
    int smtCup = 0;
    int mdtCup = 0;
    int lgtCup = 0;

    do 
    {
        //get input from user as to what they want to do
        cout << "COFFEE SHOP" << endl;
        cout << "1. Sell Coffee" << endl;
        cout << "2. Total Number of Cups Sold" << endl;
        cout << "3. Total Amount of Coffee Sold" << endl;
        cout << "4. Total Amount of Money made" << endl;
        cout << "0. Exit" << endl;
        cout << "Type a number to continue: ";
        cin >> selection;
        cout << endl;


        //loop through the solutions based on the user's selection
        switch (selection)
        {
        case 1:
            //get the number of cups of coffee from the user
            cout << "How many small cups of coffee: ";
            cin >> smCup;
            cout << "How many medium cups of coffee: ";
            cin >> mdCup;
            cout << "How many large cups of coffee: ";
            cin >> lgCup;

            //get the total cups of coffee and store it as a variable
            smtCup += smCup;
            mdtCup += mdCup;
            lgtCup += lgCup;

            system("cls");

            cout << fixed << setprecision(2) << endl;

            //Sale Coffee Receipt Page
            cout << "COFFEE SHOP" << endl;
            cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl;
            cout << "Small: " << setw(18) << smCup << setw(18) << SM_PRICE << setw(18) << smCup*SM_PRICE << endl;
            cout << "Medium: " << setw(17) << mdCup << setw(18) << MD_PRICE << setw(18) << mdCup*MD_PRICE << endl;
            cout << "Large: " << setw(18) << lgCup << setw(18) << LG_PRICE << setw(18) << lgCup*LG_PRICE << endl;
            cout << "Subtotal: " << setw(51) << (smCup*SM_PRICE)+(mdCup*MD_PRICE)+(lgCup*LG_PRICE) << endl;
            cout << "Tax: (8.25%)" << setw(49) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX << endl;
            cout << "Total: " << setw(54) << ((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))+(((smCup*SM_PRICE) + (mdCup*MD_PRICE) + (lgCup*LG_PRICE))*TAX) << endl;
            cout << endl;
            cout << endl;

            break;

        case 2:
            //Total Number of Cups Sold
            cout << "REPORT - NUMBER OF COFFEE CUPS SOLD" << endl;
            cout << "SIZE" << setw(21) << "Number" << endl;
            cout << "Small: " << setw(18) << smtCup << endl;
            cout << "Medium: " << setw(17) << mdtCup << endl;
            cout << "Large: " << setw(18) << lgtCup << endl;
            cout << endl;
            cout << endl;

            break;

        case 3:
            //Total Amount of Coffee Sold
            cout << "REPORT - AMOUNT OF COFFEE SOLD" << endl;
            cout << "SIZE" << setw(21) << "Number" << setw(18) << "OZ" << endl;
            cout << "Small: " << setw(18) << smtCup << setw(18) << smtCup*SM_OZ << endl;
            cout << "Medium: " << setw(17) << mdtCup << setw(18) << mdtCup*MD_OZ << endl;
            cout << "Large: " << setw(18) << lgtCup << setw(18) << lgtCup*LG_OZ << endl;
            cout << "Total: " << setw(36) << (smtCup*SM_OZ) + (mdtCup*MD_OZ) + (lgtCup*LG_OZ) << endl;
            cout << endl;
            cout << endl;

            break;

        case 4:
            //Total Amount of Money made
            cout << "COFFEE SHOP - REPORT MONEY MADE" << endl;
            cout << "SIZE" << setw(21) << "Number" << setw(18) << "Price" << setw(18) << "Total" << endl;
            cout << "Small: " << setw(18) << smtCup << setw(18) << SM_PRICE << setw(18) << smtCup*SM_PRICE << endl;
            cout << "Medium: " << setw(17) << mdtCup << setw(18) << MD_PRICE << setw(18) << mdtCup*MD_PRICE << endl;
            cout << "Large: " << setw(18) << lgtCup << setw(18) << LG_PRICE << setw(18) << lgtCup*LG_PRICE << endl;
            cout << "Subtotal: " << setw(51) << (smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE) << endl;
            cout << "Tax: (8.25%)" << setw(49) << ((smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE))*TAX << endl;
            cout << "Total: " << setw(54) << ((smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE)) + (((smtCup*SM_PRICE) + (mdtCup*MD_PRICE) + (lgtCup*LG_PRICE))*TAX) << endl;
            cout << endl;
            cout << endl;

            break;

        case 0:

            system("cls");

            break;

        default:
            //notify the user that an invalid selection has been inputted
            cout << "You have made an invalid selection. Please choose a number from the list." << endl;
            cout << endl;

        }

    //loop through if the user is still making a valid selection
    } while (selection != 0);

    system("pause");
    return 0;

}