【发布时间】:2020-10-09 07:20:23
【问题描述】:
目前正在研究 Stroustrup 的 C++ 简介中的一个练习,它要求:编写一个函数,给定两个向量 price 和 weight 计算一个值(一个“索引”),它是所有 price[i]*weight[ 的总和一世]。确保有 weight.size()==price.size()
vector<double> weight;
vector<double> price;
void read_weight() {
cout << "Input weight" << '\n';
for (double weights; cin >> weights; ) {
weight.push_back(weights);
if (!(cin >> weights)) {
cin.clear();
cin.ignore(numeric_limits<double>::max(), '\n' );
break;
}
}
}
void read_price() {
cout << "Input price" << '\n';
for (double prices; cin >> prices; ) {
price.push_back(prices);
if (!( cin >> prices)) {
cin.clear();
cin.ignore( numeric_limits<double>::max(), '\n' );
break;
}
}
}
void calculate() {
double sum = 0;
for (int i = 0; i < price.size(); ++i)
sum += price[i] * weight[i];
cout << "Sum is " << sum << '\n';
}
int main() {
read_weight();
read_price();
calculate();
}
这是我目前拥有的代码,但我无法弄清楚如何正确终止输入。在前面的章节中,他的书提到您可以使用除 double 之外的输入来终止(如 |)。但是,我了解到这只会使 cin 进入失败状态,并且不允许我进入价格函数。不幸的是,这本书还没有介绍如何处理这个问题,所以我只是复制了关于 cin.clear 和 cin.ignore 的代码,希望它能起作用。但这无济于事。我注意到如果我要将向量更改为 int 而不是 double 并且对行为的差异感到困惑,我实际上被允许使用单个输入。我想知道是否有人可以给我有关如何解决此问题的提示?
【问题讨论】:
-
旁白:避免使用全局变量。
标签: c++ c++11 vector input cin