繁体   English   中英

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

[英]Function returning wrong value in C++

我试图调用一个函数来返回输入数字的总和,但它只返回 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;
    }
}

您收到的总和为 0,因为您没有将返回值分配给任何东西。

试试这个:

int sum = CalculateSum(Number, Sum);

所以现在您将CalculateSum 的返回值保存为一个变量sum,您可以使用它来输出给用户。

你从不使用return(Value); . 如果您想在不使用return value情况下使用新value ,您必须传递一个引用,例如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情况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()的不符合要求的嵌入式系统,那么您是好的,否则你需要修复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM