加法语句后未增加的值

Value not being increased after addition statement?

本文关键字:增加 法语 语句      更新时间:2023-10-16

我有两个函数,将随机数添加到总值中。

问题是,每次我调用函数并打印总数时,它都不会相加。如果它生成2,它会说总数是2。之后,如果我再次调用它,它生成5,它说总数是5,并且不加(如果发生这种情况,应该是7。(

这里一切看起来都很好。。。

int human(int humanscore)
{
    int diceRoll= rand() % 7;
    cout << "player rolled: ";
    humanscore+= diceRoll;
    cout << diceRoll;
    cout << "human score is: " << humanscore;
}
int computer(int compscore)
{
    int diceRoll= rand() % 7;
    cout << "computer rolled: ";
    compscore+= diceRoll;
    cout << diceRoll;
    cout << "computer score is: " << compscore;
}
您正在修改传递给函数的参数的内部副本的值。如果您希望对外部变量进行更改,请更改函数定义以获取引用:int& score

还要注意,rand() % 7将为您提供一个范围为[0,6]的值。骰子的值在[1,6]范围内,您应该使用1 + rand() % 6

*更新:*

这可以用C++引用完成:

int computer(int& compscore)
{
    ...
    compscore += diceRoll;
    ...
}
int var = 0;
computer( var );

对于此声明,函数将实际变量var作为参数,对函数中的compscore所做的更改反映在变量var中,因为该特定调用的compscorevar只是同一变量的别名。

在C中,指针也能达到同样的效果:

int computer(int* compscore)
{
    ...
    *compscore += diceRoll;
    ...
}
int var = 0;
computer( &var );

该函数的调用为它提供了应该更改的变量的地址。对于一般用途,您可以假设使用引用的第一个实现将由编译器自动生成一个类似于最后一个代码段的解决方案。

这里是coutdiceRoll,所以它只会打印当前卷,而不是总数。

假设您正确地打印了骰子,您还需要在这些函数的末尾写入return humanscore;return compscore;,以传递回新结果。

您正在按值传递参数。这意味着当函数完成时,对它们的任何更改都会被丢弃。如果你想保持你的分数,你有几个选择。您可以通过引用传递参数,在C++中,这可以通过传递指向分数的指针来完成。你可以让函数返回新的分数,然后在下次调用函数时将返回的值传递给它。你也可以使用全局变量来获得明显不太理想的解决方案。