- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
(是的,这是作业,但已经完成,我现在只是想改进它以进行练习)
这基本上是一个销售计算器,允许您对销售项目进行多个输入,然后显示总计、销售税和总计。
我想做的修改是,我希望能够在变量中保存每个项目的成本,而不会重叠内存,然后能够在总计之上调用它们,所以您可以看到每件商品的值(value)。
============================================= ============================
//importing libraries for cin and cout, as well as setw() and setprecision()
#include <iostream>
#include <iomanip>
using namespace std; //sets all code to standard syntax
int main(){ //initializes the main function
//initializing variables
char answer = ' ';
int saleItems = 0;
double saleTax = 0.0;
double grandTotal = 0.0;
double itemValue = 0.0;
double titemValue = 0.0;
double taxPerc = 0.0;
//begins a post-test loop
do {
titemValue = 0.0; //makes sure the accumulator resets WITHIN the loop
//prompts for sale items amount
cout << "How many sales items do you have? : ";
cin >> saleItems;
//creates a loop that displays the prompt for each iteration of saleItems
for (int x = 1; x <= saleItems; x += 1){
cout << "Enter in the value of sales item " << x << " : $";
cin >> itemValue;
titemValue += itemValue; //accumulator for adding up the iterated values
}
//prompts the user to enter a sales percentage
cout << endl << endl;
cout << "Enter in the sales tax percentage(Enter 10 for 10%): ";
cin >> taxPerc;
cout << endl << endl;
//processes the variables after taxPerc has been given
saleTax = titemValue * (taxPerc / 100);
grandTotal = titemValue + saleTax;
//sets decimal precision to 2 places
cout << fixed << setprecision(2);
//displays receipt with the calculated and input values
cout << "********************************************" << endl;
cout << "******** S A L E S R E C E I P T ********" << endl;
cout << "********************************************" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "** Total Sales $" << setw(9) << titemValue << " **" << endl;
cout << "** Sales Tax $" << setw(9) << saleTax << " **" << endl;
cout << "** ---------- **" << endl;
cout << "** Grand Total $" << setw(9) << grandTotal << " **" << endl;
cout << "** **" << endl;
cout << "** **" << endl;
cout << "********************************************" << endl << endl << endl;
//prompts user to begin loop again
cout << "Do you want to run this program again? (Y/N):";
cin >> answer;
answer = toupper(answer);
cout << endl << endl;
} while (answer == 'Y');
============================================= ============================
因此,从本质上讲,我需要能够将每个 itemValue 保存为多个不同的值,而无需循环重复自身,只需替换它们,考虑到累加器将继续循环,我真的不知道我该怎么做,并将 itemValue 值相加。
最佳答案
这是使用简单数组存储项目值的一种方法。
在顶部声明一个数组。注意:你必须给它一个固定的大小。有多种方法可以使大小可变,但它们会变得更复杂(例如 vector )。最好使用常量而不是硬编码数字来指定大小,因为稍后您将需要该常量。
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 开始)。通常我会循环 x
来自 0
至 < saleItems
,但我不想更改您现有的循环。
打印收据时,添加一个打印出所有值的循环(您需要添加格式):
cout << "** **" << endl;
for (int x = 1; x <= saleItems; x += 1){
cout << "** Item " << x << " $" << itemValues[x-1] << " **" <<endl;
}
cout << "** **" << endl;
正如我在评论中所说,使用 std::vector
会更好,但如果您还没有做到这一点,数组也可以。
编辑:简单 vector
例子。要添加 vector ,您需要包含适当的标题:
#include <vector>
不需要maxSaleItems
任何更多,因为 vector 可以增长。声明 vector 变量。 <double>
使其成为包含 double
的 vector 值(value)观:
std::vector<double> itemValues;
在循环中,不是按位置设置新项目的数组值,而是使用 push_back
将其添加到 vector 的末尾.
cout << "Enter in the value of sales item " << x << " : $";
cin >> itemValue;
titemValue += itemValue; //accumulator for adding up the iterated values
itemValues.push_back(itemValue);
打印收据代码,可以完全保留为数组版本,因为您可以访问数组之类的 vector :
cout << "** **" << endl;
for (int x = 1; x <= saleItems; x += 1){
cout << "** Item " << x << " $" << itemValues[x-1] << " **" <<endl;
}
cout << "** **" << endl;
您还可以进行其他更改来制作 vector
版本更简单,但我想尽可能少地更改。
关于c++ - 保存累加器的每次迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38297649/
我想用 c 编写基本计算器:我有累加器的问题(带有“+”和“-”运算符) int main(void) { float num1,num2,res; char operator;
我已经解决了 4clojure.com 上的 45 个问题,并且在尝试使用递归和累加器解决一些问题的方式中,我注意到一个反复出现的问题。 我会尽我所能解释我正在做的事情,以最终得到模糊的解决方案,希望
my_Stream 是我想要累积并分配给变量以供进一步处理的数据。我的问题:一旦流完成,如何将变量 the_string 的内容获取到 console.log? my_Stream.onValue(f
我很好奇,从这个代码片段中得到的平均值是多少?累加器旨在为空。 boost::accumulators::accumulator_set > Accumulator; int Mean = boost
在累积 struct timespec 增量的程序中,我正在执行以下逻辑: struct timespec accu, start, stop; for (...) { // record s
我正在尝试在数组上使用 foldLeft。例如: var x = some array x.foldLeft(new Array[Int](10))((a, c) => a(c) = a(c)+1)
由于没有找到在 C++ 中重置累加器的“boost ”方法,我遇到了一段似乎可以重置 boost 累加器的代码。但是不明白它是如何实现的。代码如下- #include #include #incl
这个问题在这里已经有了答案: Does a sequential stream in Java 8 use the combiner parameter on calling collect? (1
我正在实现一个需要递归调用才能获取所有数据的 API。我已经实现了一个具有 recursive transformer 的 Bloc 组件。但是,转换器似乎一直在递归调用中返回空累加器。 commen
我永远找不到 F# 核心库的源代码。我知道它应该是开放的,但谷歌在帮助我找到它时对我并不友好,如果是这样,我会查找 Seq.fold 的实现 - 但问题就在这里。 有没有人看到以下代码段有任何问题:
最近我学习了很多 Haskell,并想尝试一些它在 Python 中的巧妙技巧。据我了解,Python的reduce会自动将函数中的迭代变量和累加器设置为reduce中给出的列表的前两个值。在 Has
documentation boost 累加器的 error_of 特性说明它通过以下公式计算平均值的误差: 平方(方差/(计数 - 1)), 其中方差的计算方式是: variance = 1/cou
我正在使用 LongAccumulator 来计算我在 Cassandra 中保存的记录数。 object Main extends App { val conf = args(0) val
Spark 有一个有用的 API,用于以线程安全的方式积累数据 https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.
我想从任意长度的列表中选择任意数量的项目。下拉列表 (QComboBox) 不允许选中项目。如果有很多项目,可检查项目的列表会变得笨拙。 我找到了 this question在用户体验 SE 子站点和
是否可以在分组时通过集合收集字符串?这就是它在 Java 8 中的工作方式: Map discountOptions = p.getDiscountOptions().Stream() .
我是一名优秀的程序员,十分优秀!