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在哪里?