函数在C ++中返回错误的值

时间:2019-04-03 00:37:05

标签: c++ function

我试图调用一个函数以返回输入数字的总和,但它仅返回0。

for循环在应用于主循环时可以正确计算总和,而无需调用该函数。但是,当我调用该函数时,它将返回错误的值。

#include <iostream>
using namespace std;

int EvenOrOdd(int Number, int Value)
{
    if (Number % 2 == 0)
        Value = 1;
    return(Value);
}

int CalculateSum(int Number, int Sum)
{
    for (int i = 1; i <= Number; i++)
        Sum = Sum + i;
    return(Sum)
}

void main()
{
    int Number = 0, Value = 0, Sum = 0;

    cout << "Please enter a positive integer: ";
    cin >> Number;

    while (Number >= 1 && Number <= 100)
    {

        EvenOrOdd(Number, Value);
        if (Value == 1)
            cout << Number << " is Even";
        else
            cout << Number << " is Odd";

        CalculateSum(Number, Sum);
        cout << "\n" << Sum << " is the sum of the first " << Number;

        cout << "\nPlease enter a positive integer: ";
        cin >> Number;
    }
}

2 个答案:

答案 0 :(得分:1)

由于未将返回值分配给任何值,因此总和为0。

尝试以下方法:

int sum = CalculateSum(Number, Sum);

因此,现在您将CalculateSum的返回值保存为变量sum,可用于将其输出给用户。

答案 1 :(得分:0)

您永远不会使用return(Value);。如果您想使用新的value而不使用return,则必须传递参考,例如int EvenOrOdd(int Number, int& Value)(或传递普通的旧指针)。 CalculateSum(Number, Sum);

也是如此

为什么?除非您传递引用或指针,否则参数将按值传递,并且该函数将收到原始变量的副本。函数返回时,对函数内副本所做的任何更改都将丢失。 (例如,呼叫者无法看到更改)。

您可以通过以下两种方式之一解决问题。 (1)利用return来获取函数正在返回的值,例如

Value = EvenOrOdd(Number, Value);

或(2)传递对值的引用,例如

int EvenOrOdd(int Number, int& Value)
{
    if (Number % 2 == 0)
        Value = 1;
    return(Value);
}

通过传递引用,对函数Value所做的任何更改都会自动返回给调用者,因为引用只是原始变量的别名。这同样适用于您在Sum

中使用CalculateSum(Number, Sum);

使用引用的示例

#include <iostream>
using namespace std;

int EvenOrOdd(int Number, int& Value)
{
    if (Number % 2 == 0)
        Value = 1;
    return(Value);
}

int CalculateSum(int Number, int& Sum)
{
    for (int i = 1; i <= Number; i++)
        Sum = Sum + i;
    return(Sum);
}

int main (void)
{
    int Number = 0, Value = 0, Sum = 0;

    cout << "Please enter a positive integer: ";
    cin >> Number;

    while (Number >= 1 && Number <= 100)
    {

        EvenOrOdd(Number, Value);
        if (Value == 1)
            cout << Number << " is Even";
        else
            cout << Number << " is Odd";

        CalculateSum(Number, Sum);
        cout << "\n" << Sum << " is the sum of the first " << Number;

        cout << "\nPlease enter a positive integer: ";
        cin >> Number;
    }
}

注意:我在上面使用了main()的一致调用-见下文)

您还使用了main()不符合调用。符合条件的调用是int main (void)int main (int argc, char **argv)(尽管argcargv可以命名为任何名称。如果您使用的是不符合标准的嵌入式系统,则需要void main()那么就可以了,否则您需要修复它。