C++ 为什么程序输出的数组和不正确?
C++初学者在这里 对于一个要求在vectors上展示知识的个人任务,我正在尝试创建一个类似自动售货机的程序,可以在控制台上播放C++ 为什么程序输出的数组和不正确?,c++,C++,C++初学者在这里 对于一个要求在vectors上展示知识的个人任务,我正在尝试创建一个类似自动售货机的程序,可以在控制台上播放 //NOT FINISHED #include <iostream> #include <vector> class Vend { public: int choice; std::vector<double> order; double total = 0.0;
//NOT FINISHED
#include <iostream>
#include <vector>
class Vend
{
public:
int choice;
std::vector<double> order;
double total = 0.0;
void mainMenu()
{
std::cout << "0: Leave\n1: Pepsi 1.19\n2: Coke [SOLD OUT]\n";
std::cout << "3: Canada Dry 1.19\n4: Granola Bar 1.99\n5: Chips 1.99\n";
std::cout << "What's your choice?\n";
}
int option()
{
std::cin >> choice;
switch (choice)
{
case 0: //Leave vending machine
std::cout << "You are now leaving the vending machine...";
return 0;
break;
case 1: //Pepsi
order.push_back(1.19);
break;
case 2: //Sold out Coke
std::cout << "It's sold out!";
return 0;
break;
case 3: //Root Beer
order.push_back(1.19);
break;
case 4: //7UP
order.push_back(1.99);
break;
case 5: // Canada Dry
order.push_back(1.99);
break;
default:
std::cout << "Invalid option!";
return 0;
break;
}
for (int i = 0; i < order.size(); i++)
{
total+=order[i];
}
}
void printTotal()
{
std::cout << "Your current total is " << total << ".\n";
}
double purchase()
{
std::cout << "Your final total is " << total << ". Please input your money!\n";
double money;
std::cin >> money;
if (money >= total && money <= 3.20)
{
std::cout << "Purchase successful. Have a good day.\n";
return 0;
}
else
{
std::cout << "Purchase declined.\n";
}
}
};
int main()
{
Vend vend;
std::cout << "You are now walking towards a vending machine, carrying $3.20.\n";
std::cout << "As you approach the machine, a voice can be heard from your destination...\n\n";
std::cout << "Welcome to our vending machine! Which item would you like?\n";
for (int selection = 0; selection < 3; selection++)
{
vend.mainMenu();
vend.option();
vend.printTotal();
selection++;
if (selection == 1)
{
std::cout << "You have selected one item. Do you want to pick another item? Y/N \n";
char response;
std::cin >> response;
if (!(response != 'Y' && response != 'y'))
{
std::cout << "Pick another item.\n";
}
else
{
vend.purchase();
return 0;
}
}
}
vend.purchase();
}
//未完成
#包括
#包括
班轮
{
公众:
智力选择;
std::向量顺序;
双倍合计=0.0;
void主菜单()
{
是的,问题是你把一个新的总数加在以前的总数上
如果您想这样做(而不是以增量方式添加到总数),请确保在for循环之前将total设置为0。否则,您可以放弃for循环,只需将total+=新项目。由于没有重置计数器,您正在重复计算一些项目
这句话是:
total = 0.0;
在此之前:
for (int i = 0; i < order.size(); i++)
for(int i=0;i
每次添加一个新项时,返回到向量时,前面的值仍然总计,这是您的错误。自C++11以来,有一种迭代向量的简写方法:for(double i:order){total+=i;}
在第一次通过main()中的循环之后
,需要将对象vend
重置为默认状态(例如,将vend.total
重置为0.0
),以便进行后续迭代。否则,值将保留(并添加到)在随后的迭代中,使用浮点值表示货币也存在问题,这不是一个好主意-因为浮点变量不能精确地表示0.1
或0.01
之类的值,并且在执行多个操作(例如添加值)时会累积这些错误。建议阅读关于混合接口和实现的答案。这将帮助您保持代码的逻辑清晰。您可以在一定程度上将它们分开-这很好。
for (int i = 0; i < order.size(); i++)