Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么程序输出的数组和不正确?_C++ - Fatal编程技术网

C++ 为什么程序输出的数组和不正确?

C++ 为什么程序输出的数组和不正确?,c++,C++,C++初学者在这里 对于一个要求在vectors上展示知识的个人任务,我正在尝试创建一个类似自动售货机的程序,可以在控制台上播放 //NOT FINISHED #include <iostream> #include <vector> class Vend { public: int choice; std::vector<double> order; double total = 0.0;

C++初学者在这里

对于一个要求在vectors上展示知识的个人任务,我正在尝试创建一个类似自动售货机的程序,可以在控制台上播放


//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++)