【问题标题】:Why isn't my array incrementing properly?为什么我的数组没有正确递增?
【发布时间】:2018-12-10 23:33:27
【问题描述】:

我正在学习 C++ 课程,但我在项目中遇到了问题。该项目的想法是使用结构和数组创建一个排序应用程序。据我所知,该程序正在按预期工作,除了人们订购了我的 printMenu 函数的一部分的每个项目的数量。如果我弄错了,或者您发现更多错误,请告诉我。

代码如下:

#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
using namespace std;

struct dinnerItemType
{
    string dinnerItem;
    double dinnerPrice;
    int dinnerOrdered;
};

void getFood(dinnerItemType ourMenu[], int &size);
void printMenu(dinnerItemType ourMenu[], int size);
void printCheck(dinnerItemType ourMenu[], int size);

//Defines the global tax constant of 6%
const double TAX = 0.06;

int main()
{
    dinnerItemType ourMenu[150];
    int size = 0;

    getFood(ourMenu, size);

    printMenu(ourMenu, size);

    printCheck(ourMenu, size);


    system("pause");
    return 0;
}

void getFood(dinnerItemType ourMenu[], int &size)
{
    ourMenu[0].dinnerItem = "Chicken Sandwich";
    ourMenu[0].dinnerPrice = 4.45;
    ourMenu[0].dinnerOrdered = 0;

    ourMenu[1].dinnerItem = "Fries";
    ourMenu[1].dinnerPrice = 2.47;
    ourMenu[1].dinnerOrdered = 0;

    ourMenu[2].dinnerItem = "Truffle Fries";
    ourMenu[2].dinnerPrice = 0.97;
    ourMenu[2].dinnerOrdered = 0;

    ourMenu[3].dinnerItem = "Filet 8oz";
    ourMenu[3].dinnerPrice = 11.99;
    ourMenu[3].dinnerOrdered = 0;

    ourMenu[4].dinnerItem = "Fruit Basket";
    ourMenu[4].dinnerPrice = 2.44;
    ourMenu[4].dinnerOrdered = 0;

    ourMenu[5].dinnerItem = "Tea";
    ourMenu[5].dinnerPrice = 0.69;
    ourMenu[5].dinnerOrdered = 0;

    ourMenu[6].dinnerItem = "Water";
    ourMenu[6].dinnerPrice = 0.25;
    ourMenu[6].dinnerOrdered = 0;

    size = 7;
}

void printMenu(dinnerItemType ourMenu[], int size)
{

    int number;
    int amount;

    cout << "Welcome to the restraunt here are your menu items: \n";
    for (int i = 0; i < size; i++)
    {
        cout << (i + 1) << ")";
        cout << ourMenu[i].dinnerItem
             << "$"
             << ourMenu[i].dinnerPrice
             << endl;
    }

    cout << "To order just type in the number associated with the menu item and hit enter.\n"
         << "Once you have completed your order just type in 0 to go to checkout.\n";
    cin >> number;

    while (number != 0)
    {
        if (number >= 1 && number <= 8)
        {
            ourMenu[number - 1].dinnerOrdered++;
        }
        else
        {
            cout << "The number does not coorispond with a menu item please try again.\n";
        }

        cout << "To order just type in the number associated with the menu item and hit enter.\n"
             << "Once you have completed your order just type in 0 to go to checkout.\n";
        cin >> number;
    }
}

void printCheck(dinnerItemType ourMenu[], int size)
{
    double total = 0;

    cout << "Your Bill: ";

    for (int i = 0; i < size; i++)
    {
        if (ourMenu[i].dinnerOrdered > 0)
        {
            total += ourMenu[i].dinnerPrice;
        }
    }

    cout << "Tax: $ " << fixed << setprecision(2) << (total * TAX);
    cout << " Ammount Due: $" << (total + (total * TAX)) << endl;
    cout << "Thank you come again!" << endl;
}

【问题讨论】:

  • 请更好地解释您的问题是什么。还考虑将其压缩为 minimal reproducible example。是更新了错误的晚餐,还是没有更新晚餐?
  • amount 未在 printMenu 中使用
  • 使用double 变量来表示金额是considered dangerous。最好使用整数类型的变量来表示所有计算的美分数,并使用小数形式仅用于显示。

标签: c++ arrays struct


【解决方案1】:

这一行:

total += ourMenu[i].dinnerPrice;

只是将一顿饭的费用加到总费用中,而不管这顿饭点了多少次。

修复它:只需将价格乘以订购次数即可:

total += ourMenu[i].dinnerPrice * ourMenu[i].dinnerOrdered;

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2021-12-31
    • 2021-03-06
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多