添加声明后价值没有增加?

时间:2011-10-11 23:09:21

标签: c++ function addition

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

问题在于,每次调用函数并打印总数时,都不会添加。如果它生成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;
}

3 个答案:

答案 0 :(得分:9)

您正在修改传递给函数的参数的内部副本的值。如果您希望对外部变量进行更改,请更改您的函数定义以获取引用: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反映在变量compscore中而且var对于那个特定的调用只是同一个变量的别名。

在C中,用指针实现相同的效果:

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

int var = 0;
computer( &var );

这个函数的调用给它一个应该改变的变量的地址。对于一般用途,您可以假设使用引用的第一个实现将自动生成编译器,类似于最后一个片段。

答案 1 :(得分:1)

cout在这里diceRoll,所以它只打印当前的滚动而不是总数。

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

答案 2 :(得分:1)

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