c++ - C++ 函数返回错误值

标签 c++ function

我正在尝试调用一个函数来返回输入数字的总和,但它只返回 0。

for 循环在 main 中应用时可以正确计算总和,而无需调用函数。然而,当我调用该函数时,它返回了一个错误的值。

#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;
    }
}

最佳答案

您永远不会使用 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 所做的任何更改都会自动返回给调用方的原始变量,因为引用只是原始变量的别名。这同样适用于您在 CalculateSum(Number, Sum);

中使用 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() 的不合格的嵌入式系统上,那么你没问题,否则你需要修复它。

关于c++ - C++ 函数返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55485379/

相关文章:

c++ - 赋值运算符

c++ - 将 double* 存储在 long (C++) 中

c++ - 在 Visual Studio 中测试时如何覆盖标准 C++ 函数?

c++ - std::stringstream 奇怪的行为

function - def f(x : Int) = x+1 and val f = (x: Int) => x+1 in Scala 之间的实际区别

c++ - c 中不兼容的指针类型警告?

function - 如果失败,我如何从python中的函数返回值

c++ - 在 C++ 中使用宏生成函数

javascript - “OnClick”功能在第一次点击时未运行,需要第二次点击

c++ - 来自多个类的好友模板函数