保存累加器的每次迭代?

时间:2016-07-11 00:29:23

标签: c++ loops c++11 counter accumulator

(是的这个WAS作业,但已经完成,我现在只是为了练习而试图改进它)

这基本上是一个销售计算器,允许您为销售项目提供多个输入,然后显示总计,销售税和总计。

我想要做的修改是,我希望能够节省变量中每个项目的成本,而不会重叠内存,然后能够在总计上方调用它们,所以你可以看到每件物品的价值。

=============================================== ============================

MOV [pixel_x], byte [x_coord]

=============================================== ============================

所以,基本上,我需要能够将每个itemValue保存到多个不同的值,而不需要循环重复,只需替换它们,我无法真正看到我如何做到这一点,因为累加器只会保持循环,并将itemValue值相加。

1 个答案:

答案 0 :(得分:0)

这是使用简单数组存储项值的一种方法。

在顶部声明一个数组。注意:您必须给它一个固定的大小。有多种方法可以获得可变大小,但它们会变得更复杂(例如向量)。最好使用常量而不是硬编码来指定大小,因为稍后您将需要常量。

const int maxSaleItems = 100;
double itemValues[maxSaleItems];

在您询问用户项目数量后,最多确定他们没有输入太大的数字。

    cout << "How many sales items do you have? : ";
    cin >> saleItems;
    if (saleItems > maxSaleItems) {
        cout << "Sorry, I can only handle " << maxSaleItems << " items.";
        continue;
    }

在输入项目值的循环内,将项目值保存到数组中:

        cout << "Enter in the value of sales item " << x << " : $";
        cin >> itemValue;
        titemValue += itemValue; //accumulator for adding up the iterated values
        itemValues[x - 1] = itemValue;

注意数组访问中的x-1 - 数组基于0(即它们的索引从0开始)。通常我会将x0循环到< saleItems,但我不想更改现有的循环。

打印收据时,添加一个打印出所有值的循环(您需要添加格式):

    cout << "**                                        **" << endl;
    for (int x = 1; x <= saleItems; x += 1){
       cout << "** Item " << x << " $" << itemValues[x-1] << "   **" <<endl;
    }
    cout << "**                                        **" << endl;

正如我在评论中所说的那样,使用std::vector会更好,但是如果你还没达到,那么阵列就可以了。

编辑:简单vector示例。 要添加矢量,您需要包含相应的标题:

#include <vector>

不再需要maxSaleItems,因为矢量可以增长。声明向量变量。 <double>使其成为包含double值的向量:

std::vector<double> itemValues;

在循环内部,不是按位置设置新项目的数组值,而只需使用push_back将其添加到向量的末尾。

    cout << "Enter in the value of sales item " << x << " : $";
    cin >> itemValue;
    titemValue += itemValue; //accumulator for adding up the iterated values
    itemValues.push_back(itemValue);

打印收据代码可以与数组版本完全相同,因为您可以访问数组之类的矢量:

cout << "**                                        **" << endl;
for (int x = 1; x <= saleItems; x += 1){
   cout << "** Item " << x << " $" << itemValues[x-1] << "   **" <<endl;
}
cout << "**                                        **" << endl;

您可以采取其他更改来简化vector版本,但我希望尽可能少地进行更改。