Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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++,我试着做一个小游戏,你可以选择你种植的东西,并且有一个货币系统 我创建了函数soldSystem,在该函数中,我使用switch来表示设备的类型以及每个设备的成本。在main中,我打印了有关工厂的信息,并带有一个“如果我已经打印了钱”。这不是我想要的。举个例子:我有100美元,用50美元种了一些东西,当我卖掉它时,我有150美元,但当我种了另一种东西时,它又从100美元开始 int soldSystem(int moneyNum) { int money; money = 10

我试着做一个小游戏,你可以选择你种植的东西,并且有一个货币系统

我创建了函数
soldSystem
,在该函数中,我使用switch来表示设备的类型以及每个设备的成本。在
main
中,我打印了有关工厂的信息,并带有一个“如果我已经打印了钱”。这不是我想要的。举个例子:我有100美元,用50美元种了一些东西,当我卖掉它时,我有150美元,但当我种了另一种东西时,它又从100美元开始


int soldSystem(int moneyNum) {
    int money;
    money = 100;
    int i;
    i = 1;
    while (i < 2) {
        switch (moneyNum)
        {
        case 0: {
            if (money >= 50) {
                cout << "Tomatoes planted\n";
                money = money - 50;
                cout << "You have :" << money << " Dollars" << endl;
                cout << "\n";
                cout << "Tomatoes Sold\n";
                money = money + 100;
            }
            else cout << "Don't have enough money\n";
        }


                break;
        case 1: {
            if (money >= 100) {
                cout << "Carrots planted";
                money = money - 100;
                cout << "You have:" << money << " Dollars" << endl;
                cout << "\n";
                cout << "Carrots Sold\n";
                money = money + 300;
            }
            else cout << "Don't have enough money\n";
        }


                break;
        case 2: {
            if (money >= 300) {
                cout << "Mushrooms planted\n";
                money = money - 500;
                cout << "You have:" << money << " Dollars" << endl;
                cout << "\n";
                cout << "Mushrooms Sold\n";
                money = money + 1000;
            }
            else cout << "Don't have enough money\n";
        }


                break;


        default:
            cout << "Try again\n";
            money = money;
            break;
        }
        i++;
        

    }


    return money;
}


int main()
{
    int i,playerChoose;
    i = 1;
    while (i > 0) {
        cout << "Choose what to plant\n";
        cout << "0-Tomatoes(50/100);1-Carrots(100/300);2-Mushrooms(500/1000)\n";
        cin >> playerChoose;
        if (-1 < playerChoose < 3) {
            cout << "You have:" << soldSystem(playerChoose) << endl;
            cout << "\n";
            
        }
    }
    cout <<"You have:"<<soldSystem << endl;
    
    return 0;
}

int soldSystem(int moneyNum){
国际货币;
金钱=100;
int i;
i=1;
而(i<2){
开关(moneyNum)
{
案例0:{
如果(货币>=50){

cout使
money
成为一个静态变量。这将使它在一次调用到下一次调用时保留其值:

static int money=100;

如果需要在函数调用之间保留值,则需要使用静态存储类。静态变量将只初始化一次。您可以在函数内部声明如下所示的“money”变量

static int money;
但是代码的问题是,在声明之后的下一个语句中赋值。因此

static int money;
money = 1500;
因此,在每次“soldSystem”函数调用期间,money都会被赋值1500

要解决这个问题,您可以将这两条语句合并为一条语句,如下所示

static int money = 1500;

现在,由于静态变量只初始化一次,当您第一次进入函数时,money被分配为1500。

在声明
soldSystem()
之前,我会声明
money
,然后在
main()中初始化它< /代码> 

< P>作为使用<代码>静态< /代码>或全局变量的一种选择,考虑一个面向对象的方法,其中<代码> SellSystem < /C> >是一个类,具有<代码> SEL()/<代码>作为函数和货币存储在类内。

声明如下:

///已售出的系统类
类索尔德系统{
公众:
///建造师,把钱设为100
SoldSystem():
货币(100)
{}
///您的soldSystem()函数,但其中没有声明money(它与类一起声明)
int sell(int moneyNum){
int i;
...
退钱;
}
私人:
///销售系统中的资金
国际货币;
};
对象的创建方式如下:

///创建SoldSystem对象
SoldSystem SoldSystem;
并将被用作:

///soldSystem上的call sell()函数
让我们试试羔羊肉吧

(完全未经测试的代码)

auto-soldSystem=[money=100](int-moneyNum)可变{
使用std::cout;
使用std::endl;
int i=1;
而(i<2){
开关(moneyNum){
案例0:{
如果(货币>=50){

我不知道如何使货币系统工作。在值更改后,我需要将该值保存为正常值,以便下次我出售某些东西时,它将添加到新值而不是旧值。似乎不工作,“预期变量名或lambda捕获列表中的“this”,似乎无法在lambda捕获中声明变量list@ColonD现在我已经对它进行了测试和调试。哦,哇,你可以声明一个变量,但不指定类型,学习了一些关于lambda函数的新知识,thanks@ColonD工作危险,以前的一个项目有很多lambda的。现在来吧,我们不能有sol这么简单的变更,所有的
静态
和lambda在哪里?